2011-02-23 10:52:22 +00:00
|
|
|
/*
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
* 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,
|
2010-02-12 13:34:04 +00:00
|
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
*
|
|
|
|
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
|
|
|
* All rights reserved.
|
|
|
|
*/
|
|
|
|
|
2019-02-18 08:08:12 +11:00
|
|
|
/** \file
|
|
|
|
* \ingroup edtransform
|
2011-02-27 20:29:51 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
|
2012-02-17 18:59:41 +00:00
|
|
|
#ifndef __TRANSFORM_H__
|
|
|
|
#define __TRANSFORM_H__
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
2009-07-08 16:17:47 +00:00
|
|
|
#include "ED_transform.h"
|
2010-02-20 20:29:09 +00:00
|
|
|
#include "ED_numinput.h"
|
2013-02-28 11:29:27 +00:00
|
|
|
#include "ED_view3d.h"
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
2017-10-16 17:15:03 -02:00
|
|
|
#include "RE_engine.h"
|
|
|
|
|
2009-12-01 18:26:18 +00:00
|
|
|
#include "DNA_listBase.h"
|
|
|
|
|
2018-02-06 16:34:11 +11:00
|
|
|
#include "DEG_depsgraph.h"
|
|
|
|
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
/* ************************** Types ***************************** */
|
|
|
|
|
2019-01-28 21:08:24 +11:00
|
|
|
struct ARegion;
|
2018-01-18 15:58:02 +01:00
|
|
|
struct Depsgraph;
|
2019-01-28 21:08:24 +11:00
|
|
|
struct EditBone;
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
struct NumInput;
|
|
|
|
struct Object;
|
2019-01-28 21:08:24 +11:00
|
|
|
struct RNG;
|
|
|
|
struct RenderEngineType;
|
|
|
|
struct ReportList;
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
struct Scene;
|
2019-01-28 21:08:24 +11:00
|
|
|
struct ScrArea;
|
|
|
|
struct SnapObjectContext;
|
|
|
|
struct TransData;
|
|
|
|
struct TransDataContainer;
|
|
|
|
struct TransInfo;
|
|
|
|
struct TransSnap;
|
|
|
|
struct TransformOrientation;
|
|
|
|
struct View3D;
|
2017-11-22 10:52:39 -02:00
|
|
|
struct ViewLayer;
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
struct bConstraint;
|
|
|
|
struct bContext;
|
|
|
|
struct wmEvent;
|
2019-01-28 21:08:24 +11:00
|
|
|
struct wmKeyConfig;
|
|
|
|
struct wmKeyMap;
|
2009-02-16 03:01:56 +00:00
|
|
|
struct wmTimer;
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
2018-02-06 23:27:49 +11:00
|
|
|
#include "DNA_object_enums.h"
|
|
|
|
|
2013-10-23 06:48:36 +00:00
|
|
|
/* transinfo->redraw */
|
|
|
|
typedef enum {
|
|
|
|
TREDRAW_NOTHING = 0,
|
|
|
|
TREDRAW_HARD = 1,
|
|
|
|
TREDRAW_SOFT = 2,
|
|
|
|
} eRedrawFlag;
|
|
|
|
|
2009-12-01 18:26:18 +00:00
|
|
|
typedef struct TransSnapPoint {
|
2012-04-29 15:47:02 +00:00
|
|
|
struct TransSnapPoint *next, *prev;
|
2009-12-01 18:26:18 +00:00
|
|
|
float co[3];
|
|
|
|
} TransSnapPoint;
|
|
|
|
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
typedef struct TransSnap {
|
2009-03-29 19:52:53 +00:00
|
|
|
short mode;
|
2009-12-03 19:18:00 +00:00
|
|
|
short target;
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
short modePoint;
|
2009-11-26 19:47:55 +00:00
|
|
|
short modeSelect;
|
2013-04-04 09:20:46 +00:00
|
|
|
bool align;
|
2014-04-17 02:53:11 +10:00
|
|
|
bool project;
|
|
|
|
bool snap_self;
|
|
|
|
bool peel;
|
2015-06-30 18:57:17 +10:00
|
|
|
bool snap_spatial_grid;
|
2009-03-29 19:52:53 +00:00
|
|
|
short status;
|
2019-01-08 10:28:20 +11:00
|
|
|
/** snapping from this point (in global-space). */
|
|
|
|
float snapPoint[3];
|
|
|
|
/** to this point (in global-space). */
|
|
|
|
float snapTarget[3];
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
float snapNormal[3];
|
2012-06-29 14:34:46 +00:00
|
|
|
char snapNodeBorder;
|
2009-12-01 18:26:18 +00:00
|
|
|
ListBase points;
|
2011-12-26 20:23:07 +00:00
|
|
|
TransSnapPoint *selectedPoint;
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
double last;
|
|
|
|
void (*applySnap)(struct TransInfo *, float *);
|
|
|
|
void (*calcSnap)(struct TransInfo *, float *);
|
|
|
|
void (*targetSnap)(struct TransInfo *);
|
2016-01-18 13:15:38 +11:00
|
|
|
/**
|
|
|
|
* Get the transform distance between two points (used by Closest snap)
|
|
|
|
*
|
|
|
|
* \note Return value can be anything,
|
|
|
|
* where the smallest absolute value defines whats closest.
|
|
|
|
*/
|
2018-04-16 16:27:55 +02:00
|
|
|
float (*distance)(struct TransInfo *t, const float p1[3], const float p2[3]);
|
2016-04-21 11:29:32 +10:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Re-usable snap context data.
|
|
|
|
*/
|
2016-05-06 04:49:21 +10:00
|
|
|
struct SnapObjectContext *object_context;
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
} TransSnap;
|
|
|
|
|
|
|
|
typedef struct TransCon {
|
2019-01-08 10:28:20 +11:00
|
|
|
short orientation;
|
2019-03-01 10:45:22 +11:00
|
|
|
/** Description of the constraint for header_print. */
|
2019-01-08 10:28:20 +11:00
|
|
|
char text[50];
|
2019-03-01 10:45:22 +11:00
|
|
|
/** Matrix of the constraint space. */
|
2019-01-08 10:28:20 +11:00
|
|
|
float mtx[3][3];
|
2019-03-01 10:45:22 +11:00
|
|
|
/** Inverse matrix of the constraint space. */
|
2019-01-08 10:28:20 +11:00
|
|
|
float imtx[3][3];
|
2019-03-01 10:45:22 +11:00
|
|
|
/** Projection constraint matrix (same as #imtx with some axis == 0). */
|
2019-01-08 10:28:20 +11:00
|
|
|
float pmtx[3][3];
|
|
|
|
/** Initial mouse value for visual calculation
|
2019-03-01 10:45:22 +11:00
|
|
|
* the one in #TransInfo is not guarantee to stay the same (Rotates change it). */
|
2019-01-08 10:28:20 +11:00
|
|
|
int imval[2];
|
2019-03-01 10:45:22 +11:00
|
|
|
/** Mode flags of the constraint. */
|
2019-01-08 10:28:20 +11:00
|
|
|
int mode;
|
2013-01-15 13:08:51 +00:00
|
|
|
void (*drawExtra)(struct TransInfo *t);
|
2018-04-16 16:27:55 +02:00
|
|
|
|
2019-01-08 10:28:20 +11:00
|
|
|
/* Note: if 'tc' is NULL, 'td' must also be NULL.
|
|
|
|
* For constraints that needs to draw differently from the other
|
|
|
|
* uses this instead of the generic draw function. */
|
|
|
|
|
|
|
|
/** Apply function pointer for linear vectorial transformation
|
|
|
|
* The last three parameters are pointers to the in/out/printable vectors. */
|
2018-04-16 16:27:55 +02:00
|
|
|
void (*applyVec)(struct TransInfo *t, struct TransDataContainer *tc, struct TransData *td, const float in[3], float out[3], float pvec[3]);
|
2019-01-08 10:28:20 +11:00
|
|
|
/** Apply function pointer for size transformation. */
|
2018-04-16 16:27:55 +02:00
|
|
|
void (*applySize)(struct TransInfo *t, struct TransDataContainer *tc, struct TransData *td, float smat[3][3]);
|
2019-01-08 10:28:20 +11:00
|
|
|
/** Apply function pointer for rotation transformation */
|
2018-04-16 16:27:55 +02:00
|
|
|
void (*applyRot)(struct TransInfo *t, struct TransDataContainer *tc, struct TransData *td, float vec[3], float *angle);
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
} TransCon;
|
|
|
|
|
|
|
|
typedef struct TransDataExtension {
|
2019-01-08 10:28:20 +11:00
|
|
|
/** Initial object drot. */
|
|
|
|
float drot[3];
|
|
|
|
// /* Initial object drotAngle, TODO: not yet implemented */
|
|
|
|
// float drotAngle;
|
|
|
|
// /* Initial object drotAxis, TODO: not yet implemented */
|
|
|
|
// float drotAxis[3];
|
2019-03-01 10:45:22 +11:00
|
|
|
/** Initial object delta quat. */
|
2019-01-08 10:28:20 +11:00
|
|
|
float dquat[4];
|
2019-03-01 10:45:22 +11:00
|
|
|
/** Initial object delta scale. */
|
2019-01-08 10:28:20 +11:00
|
|
|
float dscale[3];
|
|
|
|
/** Rotation of the data to transform. */
|
|
|
|
float *rot;
|
|
|
|
/** Initial rotation. */
|
|
|
|
float irot[3];
|
|
|
|
/** Rotation quaternion of the data to transform. */
|
|
|
|
float *quat;
|
|
|
|
/** Initial rotation quaternion. */
|
|
|
|
float iquat[4];
|
|
|
|
/** Rotation angle of the data to transform. */
|
|
|
|
float *rotAngle;
|
|
|
|
/** Initial rotation angle. */
|
|
|
|
float irotAngle;
|
|
|
|
/** Rotation axis of the data to transform. */
|
|
|
|
float *rotAxis;
|
|
|
|
/** Initial rotation axis. */
|
|
|
|
float irotAxis[4];
|
|
|
|
/** Size of the data to transform. */
|
|
|
|
float *size;
|
|
|
|
/** Initial size. */
|
|
|
|
float isize[3];
|
|
|
|
/** Object matrix. */
|
|
|
|
float obmat[4][4];
|
2019-03-01 10:45:22 +11:00
|
|
|
/** Use instead of #TransData.smtx,
|
|
|
|
* It is the same but without the #Bone.bone_mat, see #TD_PBONE_LOCAL_MTX_C. */
|
2019-01-08 10:28:20 +11:00
|
|
|
float l_smtx[3][3];
|
|
|
|
/** The rotscale matrix of pose bone, to allow using snap-align in translation mode,
|
|
|
|
* when td->mtx is the loc pose bone matrix (and hence can't be used to apply
|
|
|
|
* rotation in some cases, namely when a bone is in "NoLocal" or "Hinge" mode)... */
|
|
|
|
float r_mtx[3][3];
|
|
|
|
/** Inverse of previous one. */
|
|
|
|
float r_smtx[3][3];
|
2019-03-01 10:45:22 +11:00
|
|
|
/** Rotation mode, as defined in #eRotationModes (DNA_action_types.h). */
|
2019-01-08 10:28:20 +11:00
|
|
|
int rotOrder;
|
|
|
|
/** Original object transformation used for rigid bodies. */
|
|
|
|
float oloc[3], orot[3], oquat[4], orotAxis[3], orotAngle;
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
} TransDataExtension;
|
|
|
|
|
|
|
|
typedef struct TransData2D {
|
2019-01-08 10:28:20 +11:00
|
|
|
/** Location of data used to transform (x,y,0). */
|
|
|
|
float loc[3];
|
|
|
|
/** Pointer to real 2d location of data. */
|
|
|
|
float *loc2d;
|
2010-05-06 19:54:43 +00:00
|
|
|
|
2019-01-08 10:28:20 +11:00
|
|
|
/** Pointer to handle locations, if handles aren't being moved independently. */
|
|
|
|
float *h1, *h2;
|
2010-05-06 19:54:43 +00:00
|
|
|
float ih1[2], ih2[2];
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
} TransData2D;
|
|
|
|
|
2019-03-01 10:45:22 +11:00
|
|
|
/** Used to store 2 handles for each #TransData in case the other handle wasn't selected. */
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
typedef struct TransDataCurveHandleFlags {
|
|
|
|
char ih1, ih2;
|
|
|
|
char *h1, *h2;
|
|
|
|
} TransDataCurveHandleFlags;
|
|
|
|
|
2019-03-01 10:45:22 +11:00
|
|
|
/** Used for sequencer transform. */
|
2009-01-21 07:01:20 +00:00
|
|
|
typedef struct TransDataSeq {
|
|
|
|
struct Sequence *seq;
|
2019-03-01 10:45:22 +11:00
|
|
|
/** A copy of #Sequence.flag that may be modified for nested strips. */
|
2019-01-08 10:28:20 +11:00
|
|
|
int flag;
|
|
|
|
/** Use this so we can have transform data at the strips start,
|
|
|
|
* but apply correctly to the start frame. */
|
|
|
|
int start_offset;
|
2019-03-01 10:45:22 +11:00
|
|
|
/** one of #SELECT, #SEQ_LEFTSEL and #SEQ_RIGHTSEL. */
|
2019-01-08 10:28:20 +11:00
|
|
|
short sel_flag;
|
2009-07-12 02:01:13 +00:00
|
|
|
|
2009-01-21 07:01:20 +00:00
|
|
|
} TransDataSeq;
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
2019-03-01 10:45:22 +11:00
|
|
|
/**
|
|
|
|
* Sequencer transform customdata (stored in #TransCustomDataContainer).
|
|
|
|
*/
|
2014-11-24 18:18:35 +01:00
|
|
|
typedef struct TransSeq {
|
|
|
|
TransDataSeq *tdseq;
|
|
|
|
int min;
|
|
|
|
int max;
|
|
|
|
bool snap_left;
|
|
|
|
} TransSeq;
|
|
|
|
|
2019-03-01 10:45:22 +11:00
|
|
|
/** Used for NLA transform (stored in #TransData.extra pointer). */
|
2009-06-09 11:26:45 +00:00
|
|
|
typedef struct TransDataNla {
|
2019-01-08 10:28:20 +11:00
|
|
|
/** ID-block NLA-data is attached to. */
|
|
|
|
ID *id;
|
2018-05-13 06:44:03 +02:00
|
|
|
|
2019-01-08 10:28:20 +11:00
|
|
|
/** Original NLA-Track that the strip belongs to. */
|
|
|
|
struct NlaTrack *oldTrack;
|
|
|
|
/** Current NLA-Track that the strip belongs to. */
|
|
|
|
struct NlaTrack *nlt;
|
2018-05-13 06:44:03 +02:00
|
|
|
|
2019-01-08 10:28:20 +11:00
|
|
|
/** NLA-strip this data represents. */
|
|
|
|
struct NlaStrip *strip;
|
2018-05-13 06:44:03 +02:00
|
|
|
|
2009-07-07 05:41:59 +00:00
|
|
|
/* dummy values for transform to write in - must have 3 elements... */
|
2019-01-08 10:28:20 +11:00
|
|
|
/** start handle. */
|
|
|
|
float h1[3];
|
|
|
|
/** end handle. */
|
|
|
|
float h2[3];
|
|
|
|
|
|
|
|
/** index of track that strip is currently in. */
|
|
|
|
int trackIndex;
|
|
|
|
/** handle-index: 0 for dummy entry, -1 for start, 1 for end, 2 for both ends. */
|
|
|
|
int handle;
|
2009-06-09 11:26:45 +00:00
|
|
|
} TransDataNla;
|
|
|
|
|
2009-09-22 08:41:03 +00:00
|
|
|
struct GHash;
|
2019-01-28 21:08:24 +11:00
|
|
|
struct LinkNode;
|
2009-09-22 08:41:03 +00:00
|
|
|
|
2015-02-11 19:40:54 +11:00
|
|
|
/* header of TransDataEdgeSlideVert, TransDataEdgeSlideEdge */
|
|
|
|
typedef struct TransDataGenericSlideVert {
|
|
|
|
struct BMVert *v;
|
|
|
|
struct LinkNode **cd_loop_groups;
|
2015-02-16 18:49:18 +11:00
|
|
|
float co_orig_3d[3];
|
2015-02-11 19:40:54 +11:00
|
|
|
} TransDataGenericSlideVert;
|
|
|
|
|
2013-01-13 05:19:47 +00:00
|
|
|
typedef struct TransDataEdgeSlideVert {
|
2019-03-01 10:45:22 +11:00
|
|
|
/** #TransDataGenericSlideVert (header) */
|
2009-11-29 00:53:23 +00:00
|
|
|
struct BMVert *v;
|
2015-02-11 19:40:54 +11:00
|
|
|
struct LinkNode **cd_loop_groups;
|
2013-04-19 02:22:23 +00:00
|
|
|
float v_co_orig[3];
|
2015-02-16 18:49:18 +11:00
|
|
|
/* end generic */
|
2009-12-26 08:47:38 +00:00
|
|
|
|
2012-05-23 09:46:32 +00:00
|
|
|
float edge_len;
|
|
|
|
|
2015-05-07 19:57:54 +10:00
|
|
|
struct BMVert *v_side[2];
|
2015-02-16 18:49:18 +11:00
|
|
|
|
2012-11-07 11:19:54 +00:00
|
|
|
/* add origvert.co to get the original locations */
|
2015-05-07 19:57:54 +10:00
|
|
|
float dir_side[2][3];
|
2012-08-31 12:08:04 +00:00
|
|
|
|
|
|
|
int loop_nr;
|
2013-01-13 05:19:47 +00:00
|
|
|
} TransDataEdgeSlideVert;
|
2009-09-22 08:41:03 +00:00
|
|
|
|
2015-01-12 02:18:20 +11:00
|
|
|
|
|
|
|
/* store original data so we can correct UV's and similar when sliding */
|
|
|
|
typedef struct SlideOrigData {
|
2019-03-01 10:45:22 +11:00
|
|
|
/** Set when #origfaces is initialized. */
|
2015-01-12 02:18:20 +11:00
|
|
|
bool use_origfaces;
|
2015-11-03 19:08:14 +11:00
|
|
|
int cd_loop_mdisp_offset;
|
|
|
|
|
2019-01-08 10:28:20 +11:00
|
|
|
/** map {BMVert: TransDataGenericSlideVert} */
|
|
|
|
struct GHash *origverts;
|
2015-01-12 02:18:20 +11:00
|
|
|
struct GHash *origfaces;
|
|
|
|
struct BMesh *bm_origfaces;
|
2015-02-11 19:40:54 +11:00
|
|
|
|
|
|
|
struct MemArena *arena;
|
2019-01-08 10:28:20 +11:00
|
|
|
/** Number of math BMLoop layers. */
|
2015-02-11 19:40:54 +11:00
|
|
|
int layer_math_map_num;
|
2019-01-08 10:28:20 +11:00
|
|
|
/** Array size of 'layer_math_map_num'
|
2015-02-11 19:40:54 +11:00
|
|
|
* maps TransDataVertSlideVert.cd_group index to absolute CustomData layer index */
|
|
|
|
int *layer_math_map;
|
2015-07-21 14:15:31 +10:00
|
|
|
|
2019-01-08 10:28:20 +11:00
|
|
|
/** Array of slide vert data especially for mirror verts. */
|
2015-07-21 14:15:31 +10:00
|
|
|
TransDataGenericSlideVert *sv_mirror;
|
|
|
|
int totsv_mirror;
|
2015-01-12 02:18:20 +11:00
|
|
|
} SlideOrigData;
|
|
|
|
|
2013-01-13 05:19:47 +00:00
|
|
|
typedef struct EdgeSlideData {
|
|
|
|
TransDataEdgeSlideVert *sv;
|
2009-12-26 08:47:38 +00:00
|
|
|
int totsv;
|
2012-02-27 13:47:53 +00:00
|
|
|
|
2013-04-19 02:22:23 +00:00
|
|
|
int mval_start[2], mval_end[2];
|
2011-04-13 21:48:16 +00:00
|
|
|
struct BMEditMesh *em;
|
2012-05-23 09:46:32 +00:00
|
|
|
|
2015-01-12 02:18:20 +11:00
|
|
|
SlideOrigData orig_data;
|
2012-05-23 09:46:32 +00:00
|
|
|
|
|
|
|
|
|
|
|
int curr_sv_index;
|
2015-05-07 21:28:03 +10:00
|
|
|
|
|
|
|
/** when un-clamped - use this index: #TransDataEdgeSlideVert.dir_side */
|
|
|
|
int curr_side_unclamp;
|
2013-01-13 05:19:47 +00:00
|
|
|
} EdgeSlideData;
|
2009-09-22 08:41:03 +00:00
|
|
|
|
2018-04-16 16:27:55 +02:00
|
|
|
typedef struct EdgeSlideParams {
|
|
|
|
float perc;
|
|
|
|
|
|
|
|
bool use_even;
|
|
|
|
bool flipped;
|
|
|
|
} EdgeSlideParams;
|
2013-01-13 14:08:53 +00:00
|
|
|
|
|
|
|
typedef struct TransDataVertSlideVert {
|
2019-03-01 10:45:22 +11:00
|
|
|
/** #TransDataGenericSlideVert (header) */
|
2015-04-29 19:39:58 +10:00
|
|
|
struct BMVert *v;
|
2015-02-11 19:40:54 +11:00
|
|
|
struct LinkNode **cd_loop_groups;
|
2015-02-16 18:49:18 +11:00
|
|
|
float co_orig_3d[3];
|
2015-02-11 19:40:54 +11:00
|
|
|
/* end generic */
|
|
|
|
|
2013-01-13 14:08:53 +00:00
|
|
|
float (*co_link_orig_3d)[3];
|
|
|
|
int co_link_tot;
|
|
|
|
int co_link_curr;
|
|
|
|
} TransDataVertSlideVert;
|
|
|
|
|
|
|
|
typedef struct VertSlideData {
|
|
|
|
TransDataVertSlideVert *sv;
|
|
|
|
int totsv;
|
|
|
|
|
|
|
|
struct BMEditMesh *em;
|
|
|
|
|
2015-01-12 02:18:20 +11:00
|
|
|
SlideOrigData orig_data;
|
|
|
|
|
2013-01-13 14:08:53 +00:00
|
|
|
int curr_sv_index;
|
2015-04-08 22:58:31 +10:00
|
|
|
|
|
|
|
/* result of ED_view3d_ob_project_mat_get */
|
|
|
|
float proj_mat[4][4];
|
2013-01-13 14:08:53 +00:00
|
|
|
} VertSlideData;
|
|
|
|
|
2018-04-16 16:27:55 +02:00
|
|
|
typedef struct VertSlideParams {
|
|
|
|
float perc;
|
|
|
|
|
|
|
|
bool use_even;
|
|
|
|
bool flipped;
|
|
|
|
} VertSlideParams;
|
|
|
|
|
2014-07-09 19:58:48 +03:00
|
|
|
typedef struct BoneInitData {
|
|
|
|
struct EditBone *bone;
|
|
|
|
float tail[3];
|
|
|
|
float rad_tail;
|
|
|
|
float roll;
|
|
|
|
float head[3];
|
|
|
|
float dist;
|
|
|
|
float xwidth;
|
|
|
|
float zwidth;
|
|
|
|
} BoneInitData;
|
|
|
|
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
typedef struct TransData {
|
2019-01-08 10:28:20 +11:00
|
|
|
/** Distance needed to affect element (for Proportionnal Editing). */
|
|
|
|
float dist;
|
|
|
|
/** Distance to the nearest element (for Proportionnal Editing). */
|
|
|
|
float rdist;
|
|
|
|
/** Factor of the transformation (for Proportionnal Editing). */
|
|
|
|
float factor;
|
|
|
|
/** Location of the data to transform. */
|
|
|
|
float *loc;
|
|
|
|
/** Initial location. */
|
|
|
|
float iloc[3];
|
|
|
|
/** Value pointer for special transforms. */
|
|
|
|
float *val;
|
|
|
|
/** Old value. */
|
|
|
|
float ival;
|
|
|
|
/** Individual data center. */
|
|
|
|
float center[3];
|
|
|
|
/** Transformation matrix from data space to global space. */
|
|
|
|
float mtx[3][3];
|
|
|
|
/** Transformation matrix from global space to data space. */
|
|
|
|
float smtx[3][3];
|
|
|
|
/** Axis orientation matrix of the data. */
|
|
|
|
float axismtx[3][3];
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
struct Object *ob;
|
2019-01-08 10:28:20 +11:00
|
|
|
/** For objects/bones, the first constraint in its constraint stack. */
|
|
|
|
struct bConstraint *con;
|
|
|
|
/** For objects, poses. 1 single malloc per TransInfo! */
|
|
|
|
TransDataExtension *ext;
|
|
|
|
/** for curves, stores handle flags for modification/cancel. */
|
|
|
|
TransDataCurveHandleFlags *hdata;
|
|
|
|
/**
|
|
|
|
* Extra data (mirrored element pointer, in editmode mesh to BMVert)
|
|
|
|
* (editbone for roll fixing) (...).
|
|
|
|
*/
|
|
|
|
void *extra;
|
|
|
|
/** Various flags. */
|
|
|
|
int flag;
|
|
|
|
/** If set, copy of Object or PoseChannel protection. */
|
|
|
|
short protectflag;
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
} TransData;
|
|
|
|
|
2008-12-29 20:37:54 +00:00
|
|
|
typedef struct MouseInput {
|
2015-10-30 17:31:07 +11:00
|
|
|
void (*apply)(struct TransInfo *t, struct MouseInput *mi, const double mval[2], float output[3]);
|
2013-01-14 08:02:06 +00:00
|
|
|
void (*post)(struct TransInfo *t, float values[3]);
|
2009-07-12 02:01:13 +00:00
|
|
|
|
2019-01-08 10:28:20 +11:00
|
|
|
/** Initial mouse position. */
|
|
|
|
int imval[2];
|
2014-04-17 02:53:11 +10:00
|
|
|
bool precision;
|
2015-10-30 17:31:07 +11:00
|
|
|
float precision_factor;
|
2013-10-12 03:42:06 +00:00
|
|
|
float center[2];
|
2008-12-29 20:37:54 +00:00
|
|
|
float factor;
|
2019-01-08 10:28:20 +11:00
|
|
|
/** Additional data, if needed by the particular function. */
|
|
|
|
void *data;
|
2015-10-30 17:31:07 +11:00
|
|
|
|
|
|
|
/**
|
2015-11-07 17:31:28 +11:00
|
|
|
* Use virtual cursor, which takes precision into account
|
2015-10-30 17:31:07 +11:00
|
|
|
* keeping track of the cursors 'virtual' location,
|
|
|
|
* to avoid jumping values when its toggled.
|
|
|
|
*
|
|
|
|
* This works well for scaling drag motion,
|
|
|
|
* but not for rotating around a point (rotaton needs its own custom accumulator)
|
|
|
|
*/
|
|
|
|
bool use_virtual_mval;
|
|
|
|
struct {
|
|
|
|
double prev[2];
|
|
|
|
double accum[2];
|
|
|
|
} virtual_mval;
|
2008-12-29 20:37:54 +00:00
|
|
|
} MouseInput;
|
|
|
|
|
2016-02-01 15:15:10 +11:00
|
|
|
typedef struct TransCustomData {
|
|
|
|
void *data;
|
2018-04-16 16:27:55 +02:00
|
|
|
void (*free_cb)(struct TransInfo *, struct TransDataContainer *tc, struct TransCustomData *custom_data);
|
2016-02-01 15:15:10 +11:00
|
|
|
unsigned int use_free : 1;
|
|
|
|
} TransCustomData;
|
|
|
|
|
2016-05-31 23:56:59 +10:00
|
|
|
typedef struct TransCenterData {
|
2018-04-16 16:27:55 +02:00
|
|
|
float global[3];
|
2016-05-31 23:56:59 +10:00
|
|
|
unsigned int is_set : 1;
|
|
|
|
} TransCenterData;
|
|
|
|
|
2018-04-16 16:27:55 +02:00
|
|
|
/**
|
|
|
|
* Rule of thumb for choosing between mode/type:
|
|
|
|
* - If transform mode uses the data, assign to `mode`
|
|
|
|
* (typically in transform.c).
|
|
|
|
* - If conversion uses the data as an extension to the #TransData, assign to `type`
|
|
|
|
* (typically in transform_conversion.c).
|
|
|
|
*/
|
|
|
|
typedef struct TransCustomDataContainer {
|
|
|
|
/** Owned by the mode (grab, scale, bend... ).*/
|
|
|
|
union {
|
|
|
|
TransCustomData mode, first_elem;
|
|
|
|
};
|
|
|
|
TransCustomData type;
|
|
|
|
} TransCustomDataContainer;
|
|
|
|
#define TRANS_CUSTOM_DATA_ELEM_MAX (sizeof(TransCustomDataContainer) / sizeof(TransCustomData))
|
|
|
|
|
|
|
|
typedef struct TransDataContainer {
|
|
|
|
/**
|
|
|
|
* Use for cases we care about the active, eg: active vert of active mesh.
|
|
|
|
* if set this will _always_ be the first item in the array.
|
|
|
|
*/
|
|
|
|
bool is_active;
|
|
|
|
|
|
|
|
/** Transformed data (array). */
|
|
|
|
TransData *data;
|
|
|
|
/** Total number of transformed data. */
|
|
|
|
int data_len;
|
|
|
|
|
|
|
|
/** Transformed data extension (array). */
|
|
|
|
TransDataExtension *data_ext;
|
|
|
|
/** Transformed data for 2d (array). */
|
|
|
|
TransData2D *data_2d;
|
|
|
|
|
|
|
|
struct Object *obedit;
|
2018-05-04 14:41:51 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Use when #T_LOCAL_MATRIX is set.
|
|
|
|
* Typically: 'obedit->obmat' or 'poseobj->obmat', but may be used elsewhere too.
|
|
|
|
*/
|
|
|
|
bool use_local_mat;
|
|
|
|
float mat[4][4];
|
|
|
|
float imat[4][4];
|
|
|
|
/** 3x3 copies of matrices above. */
|
|
|
|
float mat3[3][3];
|
|
|
|
float imat3[3][3];
|
|
|
|
|
|
|
|
/** Normalized 'mat3' */
|
|
|
|
float mat3_unit[3][3];
|
2018-04-16 16:27:55 +02:00
|
|
|
|
|
|
|
/** if 't->flag & T_POSE', this denotes pose object */
|
|
|
|
struct Object *poseobj;
|
|
|
|
|
|
|
|
/** Center of transformation (in local-space), Calculated from #TransInfo.center_global. */
|
|
|
|
float center_local[3];
|
|
|
|
|
2019-01-14 14:59:18 +11:00
|
|
|
/**
|
|
|
|
* Mirror option
|
|
|
|
*/
|
|
|
|
struct {
|
|
|
|
/* Currently for mesh X mirror only. */
|
|
|
|
int axis_flag;
|
|
|
|
/** Set to -1.0f or 1.0 when use_mirror is set. */
|
|
|
|
float sign;
|
|
|
|
} mirror;
|
|
|
|
|
2018-04-16 16:27:55 +02:00
|
|
|
TransCustomDataContainer custom;
|
|
|
|
} TransDataContainer;
|
|
|
|
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
typedef struct TransInfo {
|
2018-04-16 16:27:55 +02:00
|
|
|
TransDataContainer *data_container;
|
|
|
|
int data_container_len;
|
|
|
|
/** Combine length of all #TransDataContainer.data_len
|
|
|
|
* Use to check if nothing is selected or if we have a single selection. */
|
|
|
|
int data_len_all;
|
|
|
|
|
2019-01-08 10:28:20 +11:00
|
|
|
/** Current mode. */
|
|
|
|
int mode;
|
|
|
|
/** Generic flags for special behaviors. */
|
|
|
|
int flag;
|
|
|
|
/** Special modifiers, by function, not key. */
|
|
|
|
int modifiers;
|
|
|
|
/** Current state (running, canceled. */
|
|
|
|
short state;
|
|
|
|
/** Current context/options for transform. */
|
|
|
|
int options;
|
|
|
|
/** Init value for some transformations (and rotation angle). */
|
|
|
|
float val;
|
2013-10-23 03:57:42 +00:00
|
|
|
void (*transform)(struct TransInfo *, const int[2]);
|
2019-01-08 10:28:20 +11:00
|
|
|
/** Transform function pointer. */
|
2013-10-23 06:48:36 +00:00
|
|
|
eRedrawFlag (*handleEvent)(struct TransInfo *, const struct wmEvent *);
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
/* event handler function pointer RETURN 1 if redraw is needed */
|
2019-01-08 10:28:20 +11:00
|
|
|
/** transformed constraint. */
|
|
|
|
TransCon con;
|
2010-03-22 09:30:00 +00:00
|
|
|
TransSnap tsnap;
|
2019-01-08 10:28:20 +11:00
|
|
|
/** numerical input. */
|
|
|
|
NumInput num;
|
|
|
|
/** mouse input. */
|
|
|
|
MouseInput mouse;
|
|
|
|
/** redraw flag. */
|
|
|
|
eRedrawFlag redraw;
|
|
|
|
/** proportional circle radius. */
|
|
|
|
float prop_size;
|
|
|
|
/** proportional falloff text. */
|
|
|
|
char proptext[20];
|
|
|
|
/**
|
|
|
|
* Spaces using non 1:1 aspect, (uv's, f-curve, movie-clip... etc)
|
|
|
|
* use for conversion and snapping.
|
|
|
|
*/
|
|
|
|
float aspect[3];
|
|
|
|
/** center of transformation (in global-space) */
|
|
|
|
float center_global[3];
|
|
|
|
/** center in screen coordinates. */
|
|
|
|
float center2d[2];
|
2016-05-31 23:56:59 +10:00
|
|
|
/* Lazy initialize center data for when we need other center values.
|
|
|
|
* V3D_AROUND_ACTIVE + 1 (static assert checks this) */
|
|
|
|
TransCenterData center_cache[5];
|
2019-01-08 10:28:20 +11:00
|
|
|
/** maximum index on the input vector. */
|
|
|
|
short idx_max;
|
|
|
|
/** Snapping Gears. */
|
|
|
|
float snap[3];
|
|
|
|
/** Spatial snapping gears(even when rotating, scaling... etc). */
|
|
|
|
float snap_spatial[3];
|
|
|
|
/** Mouse side of the cfra, 'L', 'R' or 'B' */
|
|
|
|
char frame_side;
|
|
|
|
|
|
|
|
/** copy from G.vd, prevents feedback. */
|
|
|
|
float viewmat[4][4];
|
|
|
|
/** and to make sure we don't have to. */
|
|
|
|
float viewinv[4][4];
|
|
|
|
/** access G.vd from other space types. */
|
|
|
|
float persmat[4][4];
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
float persinv[4][4];
|
|
|
|
short persp;
|
|
|
|
short around;
|
2019-01-08 10:28:20 +11:00
|
|
|
/** spacetype where transforming is. */
|
|
|
|
char spacetype;
|
|
|
|
/** Choice of custom cursor with or without a help line from the gizmo to the mouse position. */
|
|
|
|
char helpline;
|
|
|
|
/** Avoid looking inside TransDataContainer obedit. */
|
|
|
|
short obedit_type;
|
|
|
|
|
|
|
|
/** translation, to show for widget. */
|
|
|
|
float vec[3];
|
|
|
|
/** rot/rescale, to show for widget. */
|
|
|
|
float mat[3][3];
|
|
|
|
|
|
|
|
/** orientation matrix of the current space. */
|
|
|
|
float spacemtx[3][3];
|
|
|
|
/** name of the current space, MAX_NAME. */
|
|
|
|
char spacename[64];
|
2009-07-12 02:01:13 +00:00
|
|
|
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
/*************** NEW STUFF *********************/
|
2019-01-08 10:28:20 +11:00
|
|
|
/** event type used to launch transform. */
|
|
|
|
short launch_event;
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
2018-11-28 10:01:16 +11:00
|
|
|
struct {
|
2019-02-26 20:17:40 +11:00
|
|
|
/** Orientation type when when we're not constrained.
|
|
|
|
* nearly always global except for rotate which defaults to screen-space orientation. */
|
|
|
|
short unset;
|
|
|
|
/** Orientation to use when a key is pressed. */
|
2018-11-28 10:01:16 +11:00
|
|
|
short user;
|
2018-11-29 21:51:56 +11:00
|
|
|
/* Used when user is global. */
|
|
|
|
short user_alt;
|
2018-11-28 10:01:16 +11:00
|
|
|
short index;
|
2018-11-29 12:49:02 +11:00
|
|
|
short *types[2];
|
2019-02-08 15:14:54 +11:00
|
|
|
/* this gets used when custom_orientation is V3D_ORIENT_CUSTOM */
|
2018-11-28 10:01:16 +11:00
|
|
|
TransformOrientation *custom;
|
|
|
|
} orientation;
|
2019-01-08 10:28:20 +11:00
|
|
|
/** backup from view3d, to restore on end. */
|
|
|
|
short gizmo_flag;
|
2009-03-06 15:50:15 +00:00
|
|
|
|
|
|
|
short prop_mode;
|
2018-05-13 06:44:03 +02:00
|
|
|
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
float values[4];
|
2019-01-08 10:28:20 +11:00
|
|
|
/** Offset applied ontop of modal input. */
|
|
|
|
float values_modal_offset[4];
|
2009-03-06 15:50:15 +00:00
|
|
|
float auto_values[4];
|
2019-02-26 20:22:54 +11:00
|
|
|
|
2019-03-01 10:12:26 +11:00
|
|
|
/* Axis members for modes that use an axis separate from the orientation (rotate & shear). */
|
|
|
|
|
|
|
|
/** Primary axis, rotate only uses this. */
|
2019-02-26 20:22:54 +11:00
|
|
|
int orient_axis;
|
2019-03-01 10:12:26 +11:00
|
|
|
/** Secondary axis, shear uses this. */
|
2019-02-26 20:22:54 +11:00
|
|
|
int orient_axis_ortho;
|
2019-03-01 10:12:26 +11:00
|
|
|
|
|
|
|
/** Often this matrix has similar usage to #TransInfo.spacemtx however this
|
|
|
|
* is used to define extra axes to operate on, not necessarily a space.
|
|
|
|
*
|
|
|
|
* For example, by default rotation operates on the view (`orient_matrix[2]`),
|
|
|
|
* even when the current space isn't set to the view. */
|
2019-02-26 20:22:54 +11:00
|
|
|
float orient_matrix[3][3];
|
2019-03-01 10:12:26 +11:00
|
|
|
/** Don't overwrite when set by operator redo defines the orientation axis. */
|
2019-02-26 20:22:54 +11:00
|
|
|
bool orient_matrix_is_set;
|
2013-09-17 13:07:48 +00:00
|
|
|
|
2019-01-08 10:28:20 +11:00
|
|
|
/** remove elements if operator is canceled. */
|
|
|
|
bool remove_on_cancel;
|
2013-09-17 13:07:48 +00:00
|
|
|
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
void *view;
|
2019-01-08 10:28:20 +11:00
|
|
|
/** Only valid (non null) during an operator called function. */
|
|
|
|
struct bContext *context;
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
struct ScrArea *sa;
|
|
|
|
struct ARegion *ar;
|
2018-01-18 15:58:02 +01:00
|
|
|
struct Depsgraph *depsgraph;
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
struct Scene *scene;
|
2017-11-22 10:52:39 -02:00
|
|
|
struct ViewLayer *view_layer;
|
2009-06-23 00:41:55 +00:00
|
|
|
struct ToolSettings *settings;
|
2009-02-16 03:01:56 +00:00
|
|
|
struct wmTimer *animtimer;
|
2019-01-08 10:28:20 +11:00
|
|
|
/** so we can do lookups for header text. */
|
|
|
|
struct wmKeyMap *keymap;
|
|
|
|
/** assign from the operator, or can be NULL. */
|
|
|
|
struct ReportList *reports;
|
|
|
|
/** current mouse position. */
|
|
|
|
int mval[2];
|
|
|
|
/** use for 3d view. */
|
|
|
|
float zfac;
|
2010-03-22 09:30:00 +00:00
|
|
|
void *draw_handle_apply;
|
|
|
|
void *draw_handle_view;
|
|
|
|
void *draw_handle_pixel;
|
|
|
|
void *draw_handle_cursor;
|
2018-04-16 16:27:55 +02:00
|
|
|
|
2018-06-12 17:00:07 +02:00
|
|
|
/** Currently only used for random curve of proportional editing. */
|
|
|
|
struct RNG *rng;
|
|
|
|
|
2018-04-16 16:27:55 +02:00
|
|
|
/** Typically for mode settings. */
|
|
|
|
TransCustomDataContainer custom;
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
} TransInfo;
|
|
|
|
|
|
|
|
|
|
|
|
/* ******************** Macros & Prototypes *********************** */
|
|
|
|
|
|
|
|
/* transinfo->state */
|
2019-01-14 12:41:01 +11:00
|
|
|
enum {
|
|
|
|
TRANS_STARTING = 0,
|
|
|
|
TRANS_RUNNING = 1,
|
|
|
|
TRANS_CONFIRM = 2,
|
|
|
|
TRANS_CANCEL = 3,
|
|
|
|
};
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
|
|
|
/* transinfo->flag */
|
2019-01-14 12:41:01 +11:00
|
|
|
enum {
|
|
|
|
T_OBJECT = 1 << 0,
|
|
|
|
/** \note We could remove 'T_EDIT' and use 'obedit_type', for now ensure they're in sync. */
|
|
|
|
T_EDIT = 1 << 1,
|
|
|
|
T_POSE = 1 << 2,
|
|
|
|
T_TEXTURE = 1 << 3,
|
|
|
|
/** Transforming the camera while in camera view. */
|
|
|
|
T_CAMERA = 1 << 4,
|
|
|
|
/** Transforming the 3D cursor. */
|
|
|
|
T_CURSOR = 1 << 5,
|
|
|
|
/** Transform points, having no rotation/scale. */
|
|
|
|
T_POINTS = 1 << 6,
|
|
|
|
/**
|
|
|
|
* Apply matrix #TransDataContainer.matrix, this avoids having to have duplicate check all over
|
2019-03-08 17:48:49 +11:00
|
|
|
* that happen to apply to specific modes (edit & pose for eg). */
|
2019-01-14 12:41:01 +11:00
|
|
|
T_LOCAL_MATRIX = 1 << 7,
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
2019-01-14 12:41:01 +11:00
|
|
|
/** restrictions flags */
|
|
|
|
T_NO_CONSTRAINT = 1 << 8,
|
|
|
|
T_NULL_ONE = 1 << 9,
|
|
|
|
T_NO_ZERO = 1 << 10,
|
|
|
|
T_ALL_RESTRICTIONS = T_NO_CONSTRAINT | T_NULL_ONE | T_NO_ZERO,
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
2019-01-14 12:41:01 +11:00
|
|
|
T_PROP_EDIT = 1 << 11,
|
|
|
|
T_PROP_CONNECTED = 1 << 12,
|
|
|
|
T_PROP_PROJECTED = 1 << 13,
|
|
|
|
T_PROP_EDIT_ALL = T_PROP_EDIT | T_PROP_CONNECTED | T_PROP_PROJECTED,
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
2019-01-14 12:41:01 +11:00
|
|
|
T_V3D_ALIGN = 1 << 14,
|
|
|
|
/** For 2d views like uv or fcurve. */
|
|
|
|
T_2D_EDIT = 1 << 15,
|
|
|
|
T_CLIP_UV = 1 << 16,
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
2019-01-14 12:41:01 +11:00
|
|
|
/** Auto-ik is on. */
|
|
|
|
T_AUTOIK = 1 << 18,
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
2019-01-14 14:59:18 +11:00
|
|
|
/** Don't use mirror even if the data-block option is set. */
|
|
|
|
T_NO_MIRROR = 1 << 19,
|
2009-03-06 15:50:15 +00:00
|
|
|
|
2019-01-14 12:41:01 +11:00
|
|
|
T_AUTOVALUES = 1 << 20,
|
2009-03-06 15:50:15 +00:00
|
|
|
|
2019-01-14 12:41:01 +11:00
|
|
|
/** To specify if we save back settings at the end. */
|
|
|
|
T_MODAL = 1 << 21,
|
2009-03-06 15:50:15 +00:00
|
|
|
|
2019-01-14 12:41:01 +11:00
|
|
|
/** No retopo. */
|
|
|
|
T_NO_PROJECT = 1 << 22,
|
2010-03-28 13:59:33 +00:00
|
|
|
|
2019-01-14 12:41:01 +11:00
|
|
|
T_RELEASE_CONFIRM = 1 << 23,
|
2010-04-02 19:40:51 +00:00
|
|
|
|
2019-01-14 12:41:01 +11:00
|
|
|
/** Alternative transformation. used to add offset to tracking markers. */
|
|
|
|
T_ALT_TRANSFORM = 1 << 24,
|
2011-11-07 12:55:18 +00:00
|
|
|
|
2019-01-14 12:41:01 +11:00
|
|
|
/** #TransInfo.center has been set, don't change it. */
|
|
|
|
T_OVERRIDE_CENTER = 1 << 25,
|
2017-08-28 16:00:28 +10:00
|
|
|
|
2019-01-14 12:41:01 +11:00
|
|
|
T_MODAL_CURSOR_SET = 1 << 26,
|
2018-05-24 14:23:32 +02:00
|
|
|
|
2019-01-14 12:41:01 +11:00
|
|
|
T_CLNOR_REBUILD = 1 << 27,
|
|
|
|
};
|
2018-05-25 22:24:24 +05:30
|
|
|
|
2019-01-14 12:41:01 +11:00
|
|
|
/** #TransInfo.modifiers */
|
|
|
|
enum {
|
|
|
|
MOD_CONSTRAINT_SELECT = 1 << 0,
|
|
|
|
MOD_PRECISION = 1 << 1,
|
|
|
|
MOD_SNAP = 1 << 2,
|
|
|
|
MOD_SNAP_INVERT = 1 << 3,
|
|
|
|
MOD_CONSTRAINT_PLANE = 1 << 4,
|
|
|
|
};
|
2009-01-03 22:15:59 +00:00
|
|
|
|
2014-01-21 13:13:41 +01:00
|
|
|
/* use node center for transform instead of upper-left corner.
|
|
|
|
* disabled since it makes absolute snapping not work so nicely
|
|
|
|
*/
|
|
|
|
// #define USE_NODE_CENTER
|
|
|
|
|
2009-01-03 22:15:59 +00:00
|
|
|
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
/* ******************************************************************************** */
|
|
|
|
|
2019-03-01 10:45:22 +11:00
|
|
|
/** #TransInfo.helpline */
|
2019-01-14 12:41:01 +11:00
|
|
|
enum {
|
|
|
|
HLP_NONE = 0,
|
|
|
|
HLP_SPRING = 1,
|
|
|
|
HLP_ANGLE = 2,
|
|
|
|
HLP_HARROW = 3,
|
|
|
|
HLP_VARROW = 4,
|
|
|
|
HLP_CARROW = 5,
|
|
|
|
HLP_TRACKBALL = 6,
|
|
|
|
};
|
2009-04-30 11:47:35 +00:00
|
|
|
|
2019-03-01 10:45:22 +11:00
|
|
|
/** #TransCon.mode, #TransInfo.con.mode */
|
2019-01-14 12:41:01 +11:00
|
|
|
enum {
|
2019-02-28 00:34:14 +11:00
|
|
|
/** When set constraints are in use. */
|
2019-01-14 12:41:01 +11:00
|
|
|
CON_APPLY = 1 << 0,
|
2019-02-21 21:52:56 +11:00
|
|
|
/** These are only used for modal execution. */
|
2019-01-14 12:41:01 +11:00
|
|
|
CON_AXIS0 = 1 << 1,
|
|
|
|
CON_AXIS1 = 1 << 2,
|
|
|
|
CON_AXIS2 = 1 << 3,
|
|
|
|
CON_SELECT = 1 << 4,
|
|
|
|
/** Does not reorient vector to face viewport when on. */
|
|
|
|
CON_NOFLIP = 1 << 5,
|
|
|
|
CON_USER = 1 << 6,
|
|
|
|
};
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
2019-03-01 10:45:22 +11:00
|
|
|
/** #TransData.flag */
|
2019-01-14 12:41:01 +11:00
|
|
|
enum {
|
|
|
|
TD_SELECTED = 1 << 0,
|
|
|
|
TD_NOACTION = 1 << 2,
|
|
|
|
TD_USEQUAT = 1 << 3,
|
|
|
|
TD_NOTCONNECTED = 1 << 4,
|
|
|
|
/** Used for scaling of #MetaElem.rad */
|
|
|
|
TD_SINGLESIZE = 1 << 5,
|
|
|
|
/** Scale relative to individual element center */
|
|
|
|
TD_INDIVIDUAL_SCALE = 1 << 8,
|
|
|
|
TD_NOCENTER = 1 << 9,
|
|
|
|
/** #TransData.ext abused for particle key timing. */
|
|
|
|
TD_NO_EXT = 1 << 10,
|
|
|
|
/** don't transform this data */
|
|
|
|
TD_SKIP = 1 << 11,
|
|
|
|
/** if this is a bez triple, we need to restore the handles,
|
|
|
|
* if this is set #TransData.hdata needs freeing */
|
|
|
|
TD_BEZTRIPLE = 1 << 12,
|
|
|
|
/** when this is set, don't apply translation changes to this element */
|
|
|
|
TD_NO_LOC = 1 << 13,
|
|
|
|
/** for Graph Editor autosnap, indicates that point should not undergo autosnapping */
|
|
|
|
TD_NOTIMESNAP = 1 << 14,
|
|
|
|
/** for Graph Editor - curves that can only have int-values need their keyframes tagged with this */
|
|
|
|
TD_INTVALUES = 1 << 15,
|
|
|
|
/** For editmode mirror, clamp to x = 0 */
|
|
|
|
TD_MIRROR_EDGE = 1 << 16,
|
|
|
|
/** For fcurve handles, move them along with their keyframes */
|
|
|
|
TD_MOVEHANDLE1 = 1 << 17,
|
|
|
|
TD_MOVEHANDLE2 = 1 << 18,
|
|
|
|
/** Exceptional case with pose bone rotating when a parent bone has 'Local Location'
|
|
|
|
* option enabled and rotating also transforms it. */
|
|
|
|
TD_PBONE_LOCAL_MTX_P = 1 << 19,
|
|
|
|
/** Same as above but for a child bone. */
|
|
|
|
TD_PBONE_LOCAL_MTX_C = 1 << 20,
|
|
|
|
};
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
2019-03-01 10:45:22 +11:00
|
|
|
/** #TransSnap.status */
|
2019-01-14 12:41:01 +11:00
|
|
|
enum {
|
|
|
|
SNAP_FORCED = 1 << 0,
|
|
|
|
TARGET_INIT = 1 << 1,
|
|
|
|
POINT_INIT = 1 << 2,
|
|
|
|
MULTI_POINTS = 1 << 3,
|
|
|
|
};
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
2016-06-23 16:43:12 +02:00
|
|
|
/* Hard min/max for proportional size. */
|
|
|
|
#define T_PROP_SIZE_MIN 1e-6f
|
|
|
|
#define T_PROP_SIZE_MAX 1e12f
|
|
|
|
|
2014-04-17 13:46:34 +10:00
|
|
|
bool initTransform(struct bContext *C, struct TransInfo *t, struct wmOperator *op, const struct wmEvent *event, int mode);
|
2009-01-03 22:15:59 +00:00
|
|
|
void saveTransform(struct bContext *C, struct TransInfo *t, struct wmOperator *op);
|
2013-03-13 09:03:46 +00:00
|
|
|
int transformEvent(TransInfo *t, const struct wmEvent *event);
|
2010-11-20 21:43:16 +00:00
|
|
|
void transformApply(struct bContext *C, TransInfo *t);
|
2008-12-31 17:11:42 +00:00
|
|
|
int transformEnd(struct bContext *C, TransInfo *t);
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
|
|
|
void setTransformViewMatrices(TransInfo *t);
|
2015-06-26 15:45:09 +10:00
|
|
|
void setTransformViewAspect(TransInfo *t, float r_aspect[3]);
|
2015-10-30 17:31:07 +11:00
|
|
|
void convertViewVec(TransInfo *t, float r_vec[3], double dx, double dy);
|
2013-02-28 11:29:27 +00:00
|
|
|
void projectIntViewEx(TransInfo *t, const float vec[3], int adr[2], const eV3DProjTest flag);
|
2012-03-12 06:53:47 +00:00
|
|
|
void projectIntView(TransInfo *t, const float vec[3], int adr[2]);
|
2013-02-28 11:29:27 +00:00
|
|
|
void projectFloatViewEx(TransInfo *t, const float vec[3], float adr[2], const eV3DProjTest flag);
|
2012-03-12 06:53:47 +00:00
|
|
|
void projectFloatView(TransInfo *t, const float vec[3], float adr[2]);
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
2014-03-30 11:08:33 +11:00
|
|
|
void applyAspectRatio(TransInfo *t, float vec[2]);
|
|
|
|
void removeAspectRatio(TransInfo *t, float vec[2]);
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
2009-03-28 20:46:38 +00:00
|
|
|
void drawPropCircle(const struct bContext *C, TransInfo *t);
|
2009-01-10 18:33:16 +00:00
|
|
|
|
2009-12-21 17:23:44 +00:00
|
|
|
struct wmKeyMap *transform_modal_keymap(struct wmKeyConfig *keyconf);
|
2.5
Modal keymaps.
I've tried to make it as simple as possible, yet still using sufficient facilities to enable self-documenting UIs, saving/reading in files, and proper Python support.
The simplicity is: the 'modal keymap' just checks an event, uses event matching similarly to other keymap matching, and if there's a match it changes the event type, and sets the event value to what the modal keymap has defined. The event values are being defined using EnumPropertyItem structs, so the UI will be able to show all options in self-documenting way.
This system also allows to still handle hardcoded own events.
Tech doc:
1) define keymap
- Create map with unique name, WM_modalkeymap_add()
- Give map property definitions (EnumPropertyItem *)
This only for UI, so user can get information on available options
2) items
- WM_modalkeymap_add_item(): give it an enum value for events
3) activate
- In keymap definition code, assign the modal keymap to operatortype
WM_modalkeymap_assign()
4) event manager
- The event handler will check for modal keymap, if so:
- If the modal map has a match:
- Sets event->type to EVT_MODAL_MAP
- Sets event->val to the enum value
5) modal handler
- If event type is EVT_MODAL_MAP:
- Check event->val, handle it
- Other events can just be handled still
Two examples added in the code:
editors/transform/transform.c: transform_modal_keymap()
editors/screen/screen_ops.c: keymap_modal_set()
Also: to support 'key release' the define KM_RELEASE now is officially
used in event manager, this is not '0', so don't check key events with
the old convention if(event->val) but use if(event->val==KM_PRESS)
2009-07-21 11:03:07 +00:00
|
|
|
|
|
|
|
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
/*********************** transform_conversions.c ********** */
|
2009-01-28 02:56:58 +00:00
|
|
|
|
2012-06-08 14:31:38 +00:00
|
|
|
void flushTransIntFrameActionData(TransInfo *t);
|
2009-01-28 02:56:58 +00:00
|
|
|
void flushTransGraphData(TransInfo *t);
|
|
|
|
void remake_graph_transdata(TransInfo *t, struct ListBase *anim_data);
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
void flushTransUVs(TransInfo *t);
|
|
|
|
void flushTransParticles(TransInfo *t);
|
2013-04-04 09:20:46 +00:00
|
|
|
bool clipUVTransform(TransInfo *t, float vec[2], const bool resize);
|
2012-08-06 13:40:29 +00:00
|
|
|
void clipUVData(TransInfo *t);
|
2009-01-04 01:08:01 +00:00
|
|
|
void flushTransNodes(TransInfo *t);
|
2009-01-21 07:01:20 +00:00
|
|
|
void flushTransSeq(TransInfo *t);
|
2011-11-07 12:55:18 +00:00
|
|
|
void flushTransTracking(TransInfo *t);
|
2012-06-04 16:42:58 +00:00
|
|
|
void flushTransMasking(TransInfo *t);
|
2014-07-21 12:02:05 +02:00
|
|
|
void flushTransPaintCurve(TransInfo *t);
|
2018-04-16 16:27:55 +02:00
|
|
|
void restoreBones(TransDataContainer *tc);
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
2018-07-14 23:49:00 +02:00
|
|
|
/*********************** transform_gizmo.c ********** */
|
2017-04-07 00:35:57 +10:00
|
|
|
|
2018-07-14 23:49:00 +02:00
|
|
|
#define GIZMO_AXIS_LINE_WIDTH 2.0f
|
2017-04-07 00:35:57 +10:00
|
|
|
|
2018-02-06 16:34:11 +11:00
|
|
|
/* return 0 when no gimbal for selection */
|
2018-04-05 18:20:27 +02:00
|
|
|
bool gimbal_axis(struct Object *ob, float gmat[3][3]);
|
2018-10-03 16:25:10 -03:00
|
|
|
void drawDial3d(const TransInfo *t);
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
|
|
|
/*********************** TransData Creation and General Handling *********** */
|
|
|
|
void createTransData(struct bContext *C, TransInfo *t);
|
|
|
|
void sort_trans_data_dist(TransInfo *t);
|
2009-12-14 03:20:17 +00:00
|
|
|
void special_aftertrans_update(struct bContext *C, TransInfo *t);
|
2013-06-24 22:41:37 +00:00
|
|
|
int special_transform_moving(TransInfo *t);
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
|
|
|
void transform_autoik_update(TransInfo *t, short mode);
|
2014-11-27 21:37:42 +01:00
|
|
|
bool transdata_check_local_islands(TransInfo *t, short around);
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
2018-06-05 11:00:36 +02:00
|
|
|
int count_set_pose_transflags(struct Object *ob, const int mode, const short around, bool has_translate_rotate[2]);
|
2009-07-12 02:01:13 +00:00
|
|
|
|
2018-09-14 13:59:58 +02:00
|
|
|
/* Auto-keyframe applied after transform, returns true if motion paths need to be updated. */
|
|
|
|
void autokeyframe_object(
|
2018-05-13 06:37:36 +02:00
|
|
|
struct bContext *C, struct Scene *scene, struct ViewLayer *view_layer, struct Object *ob, int tmode);
|
2018-09-14 13:59:58 +02:00
|
|
|
void autokeyframe_pose(
|
2018-05-13 06:37:36 +02:00
|
|
|
struct bContext *C, struct Scene *scene, struct Object *ob, int tmode, short targetless_ik);
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
2018-09-14 13:59:58 +02:00
|
|
|
/* Test if we need to update motion paths for a given object. */
|
|
|
|
bool motionpath_need_update_object(struct Scene *scene, struct Object *ob);
|
|
|
|
bool motionpath_need_update_pose(struct Scene *scene, struct Object *ob);
|
|
|
|
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
/*********************** Constraints *****************************/
|
|
|
|
|
2010-10-16 14:32:17 +00:00
|
|
|
void drawConstraint(TransInfo *t);
|
2009-01-10 18:33:16 +00:00
|
|
|
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
void getConstraintMatrix(TransInfo *t);
|
|
|
|
void setConstraint(TransInfo *t, float space[3][3], int mode, const char text[]);
|
2013-05-01 05:26:10 +00:00
|
|
|
void setAxisMatrixConstraint(TransInfo *t, int mode, const char text[]);
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
void setLocalConstraint(TransInfo *t, int mode, const char text[]);
|
2009-10-07 20:55:14 +00:00
|
|
|
void setUserConstraint(TransInfo *t, short orientation, int mode, const char text[]);
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
|
|
|
void constraintNumInput(TransInfo *t, float vec[3]);
|
|
|
|
|
2013-04-04 09:20:46 +00:00
|
|
|
bool isLockConstraint(TransInfo *t);
|
|
|
|
int getConstraintSpaceDimension(TransInfo *t);
|
2019-02-26 20:17:40 +11:00
|
|
|
int constraintModeToIndex(const TransInfo *t);
|
|
|
|
char constraintModeToChar(const TransInfo *t);
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
|
|
|
void startConstraint(TransInfo *t);
|
|
|
|
void stopConstraint(TransInfo *t);
|
|
|
|
|
|
|
|
void initSelectConstraint(TransInfo *t, float mtx[3][3]);
|
|
|
|
void selectConstraint(TransInfo *t);
|
|
|
|
void postSelectConstraint(TransInfo *t);
|
|
|
|
|
|
|
|
void setNearestAxis(TransInfo *t);
|
|
|
|
|
|
|
|
/*********************** Snapping ********************************/
|
|
|
|
|
|
|
|
typedef enum {
|
|
|
|
NO_GEARS = 0,
|
|
|
|
BIG_GEARS = 1,
|
2019-01-15 23:57:49 +11:00
|
|
|
SMALL_GEARS = 2,
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
} GearsType;
|
|
|
|
|
2018-12-18 11:54:02 +01:00
|
|
|
bool transformModeUseSnap(const TransInfo *t);
|
|
|
|
|
2013-11-06 17:46:32 +00:00
|
|
|
void snapGridIncrement(TransInfo *t, float *val);
|
|
|
|
void snapGridIncrementAction(TransInfo *t, float *val, GearsType action);
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
2015-03-19 20:47:38 +01:00
|
|
|
void snapSequenceBounds(TransInfo *t, const int mval[2]);
|
2014-11-24 18:18:35 +01:00
|
|
|
|
2018-07-09 17:57:05 +02:00
|
|
|
bool activeSnap(const TransInfo *t);
|
|
|
|
bool validSnap(const TransInfo *t);
|
2009-12-03 19:18:00 +00:00
|
|
|
|
2009-03-29 19:52:53 +00:00
|
|
|
void initSnapping(struct TransInfo *t, struct wmOperator *op);
|
2016-04-21 11:29:32 +10:00
|
|
|
void freeSnapping(struct TransInfo *t);
|
2009-10-12 22:33:32 +00:00
|
|
|
void applyProject(TransInfo *t);
|
2013-11-06 17:46:32 +00:00
|
|
|
void applyGridAbsolute(TransInfo *t);
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
void applySnapping(TransInfo *t, float *vec);
|
|
|
|
void resetSnapping(TransInfo *t);
|
2013-10-23 06:48:36 +00:00
|
|
|
eRedrawFlag handleSnapping(TransInfo *t, const struct wmEvent *event);
|
2009-03-28 20:46:38 +00:00
|
|
|
void drawSnapping(const struct bContext *C, TransInfo *t);
|
2018-07-09 17:57:05 +02:00
|
|
|
bool usingSnappingNormal(const TransInfo *t);
|
|
|
|
bool validSnappingNormal(const TransInfo *t);
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
2018-07-09 17:57:05 +02:00
|
|
|
void getSnapPoint(const TransInfo *t, float vec[3]);
|
2009-12-01 18:26:18 +00:00
|
|
|
void addSnapPoint(TransInfo *t);
|
2013-10-23 06:48:36 +00:00
|
|
|
eRedrawFlag updateSelectedSnapPoint(TransInfo *t);
|
2009-12-01 18:26:18 +00:00
|
|
|
void removeSnapPoint(TransInfo *t);
|
|
|
|
|
2008-12-29 20:37:54 +00:00
|
|
|
/********************** Mouse Input ******************************/
|
|
|
|
|
|
|
|
typedef enum {
|
|
|
|
INPUT_NONE,
|
|
|
|
INPUT_VECTOR,
|
|
|
|
INPUT_SPRING,
|
|
|
|
INPUT_SPRING_FLIP,
|
2014-06-03 22:02:02 +06:00
|
|
|
INPUT_SPRING_DELTA,
|
2008-12-29 20:37:54 +00:00
|
|
|
INPUT_ANGLE,
|
2013-10-13 01:09:23 +00:00
|
|
|
INPUT_ANGLE_SPRING,
|
2008-12-29 20:37:54 +00:00
|
|
|
INPUT_TRACKBALL,
|
|
|
|
INPUT_HORIZONTAL_RATIO,
|
|
|
|
INPUT_HORIZONTAL_ABSOLUTE,
|
|
|
|
INPUT_VERTICAL_RATIO,
|
2009-09-21 00:48:36 +00:00
|
|
|
INPUT_VERTICAL_ABSOLUTE,
|
2013-01-31 22:18:37 +00:00
|
|
|
INPUT_CUSTOM_RATIO,
|
2014-06-03 22:02:02 +06:00
|
|
|
INPUT_CUSTOM_RATIO_FLIP,
|
2008-12-29 20:37:54 +00:00
|
|
|
} MouseInputMode;
|
|
|
|
|
2016-12-15 11:12:43 +01:00
|
|
|
void initMouseInput(TransInfo *t, MouseInput *mi, const float center[2], const int mval[2], const bool precision);
|
2008-12-29 20:37:54 +00:00
|
|
|
void initMouseInputMode(TransInfo *t, MouseInput *mi, MouseInputMode mode);
|
2013-10-23 06:48:36 +00:00
|
|
|
eRedrawFlag handleMouseInput(struct TransInfo *t, struct MouseInput *mi, const struct wmEvent *event);
|
2011-05-20 07:40:05 +00:00
|
|
|
void applyMouseInput(struct TransInfo *t, struct MouseInput *mi, const int mval[2], float output[3]);
|
2008-12-29 20:37:54 +00:00
|
|
|
|
2013-01-15 03:35:31 +00:00
|
|
|
void setCustomPoints(TransInfo *t, MouseInput *mi, const int start[2], const int end[2]);
|
2018-10-17 16:30:15 +11:00
|
|
|
void setCustomPointsFromDirection(TransInfo *t, MouseInput *mi, const float dir[2]);
|
2013-01-14 08:02:06 +00:00
|
|
|
void setInputPostFct(MouseInput *mi, void (*post)(struct TransInfo *t, float values[3]));
|
2009-09-21 00:48:36 +00:00
|
|
|
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
/*********************** Generics ********************************/
|
|
|
|
|
2018-09-21 20:08:25 +02:00
|
|
|
void initTransDataContainers_FromObjectData(TransInfo *t, struct Object *obact, struct Object **objects, uint objects_len);
|
2013-11-25 07:49:49 +11:00
|
|
|
void initTransInfo(struct bContext *C, TransInfo *t, struct wmOperator *op, const struct wmEvent *event);
|
2018-04-26 10:08:41 +02:00
|
|
|
void freeTransCustomDataForMode(TransInfo *t);
|
2013-04-18 01:52:38 +00:00
|
|
|
void postTrans(struct bContext *C, TransInfo *t);
|
2013-04-24 15:15:01 +00:00
|
|
|
void resetTransModal(TransInfo *t);
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
void resetTransRestrictions(TransInfo *t);
|
|
|
|
|
2012-08-05 20:40:26 +00:00
|
|
|
void drawLine(TransInfo *t, const float center[3], const float dir[3], char axis, short options);
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
|
|
|
/* DRAWLINE options flags */
|
|
|
|
#define DRAWLIGHT 1
|
|
|
|
|
|
|
|
void applyTransObjects(TransInfo *t);
|
|
|
|
void restoreTransObjects(TransInfo *t);
|
|
|
|
void recalcData(TransInfo *t);
|
|
|
|
|
|
|
|
void calculateCenter2D(TransInfo *t);
|
2018-04-16 16:27:55 +02:00
|
|
|
void calculateCenterLocal(TransInfo *t, const float center_global[3]);
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
2016-05-31 23:56:59 +10:00
|
|
|
const TransCenterData *transformCenter_from_type(TransInfo *t, int around);
|
2014-05-09 16:52:09 +10:00
|
|
|
void calculateCenter(TransInfo *t);
|
|
|
|
|
|
|
|
/* API functions for getting center points */
|
|
|
|
void calculateCenterBound(TransInfo *t, float r_center[3]);
|
|
|
|
void calculateCenterMedian(TransInfo *t, float r_center[3]);
|
|
|
|
void calculateCenterCursor(TransInfo *t, float r_center[3]);
|
|
|
|
void calculateCenterCursor2D(TransInfo *t, float r_center[2]);
|
|
|
|
void calculateCenterCursorGraph2D(TransInfo *t, float r_center[2]);
|
|
|
|
bool calculateCenterActive(TransInfo *t, bool select_only, float r_center[3]);
|
|
|
|
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
void calculatePropRatio(TransInfo *t);
|
|
|
|
|
2018-05-21 17:24:14 +02:00
|
|
|
void getViewVector(const TransInfo *t, const float coord[3], float vec[3]);
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
2015-07-14 04:27:32 +10:00
|
|
|
void transform_data_ext_rotate(TransData *td, float mat[3][3], bool use_drot);
|
|
|
|
|
2009-01-18 21:36:38 +00:00
|
|
|
/*********************** Transform Orientations ******************************/
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
2009-01-18 21:36:38 +00:00
|
|
|
void initTransformOrientation(struct bContext *C, TransInfo *t);
|
|
|
|
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
/* Those two fill in mat and return non-zero on success */
|
2013-04-04 09:20:46 +00:00
|
|
|
bool createSpaceNormal(float mat[3][3], const float normal[3]);
|
2013-07-24 13:56:36 +00:00
|
|
|
bool createSpaceNormalTangent(float mat[3][3], const float normal[3], const float tangent[3]);
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
2013-11-25 07:49:49 +11:00
|
|
|
struct TransformOrientation *addMatrixSpace(struct bContext *C, float mat[3][3],
|
|
|
|
const char *name, const bool overwrite);
|
2017-06-01 20:41:18 +02:00
|
|
|
bool applyTransformOrientation(const struct TransformOrientation *ts, float r_mat[3][3], char r_name[64]);
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
2019-01-14 12:41:01 +11:00
|
|
|
enum {
|
|
|
|
ORIENTATION_NONE = 0,
|
|
|
|
ORIENTATION_NORMAL = 1,
|
|
|
|
ORIENTATION_VERT = 2,
|
|
|
|
ORIENTATION_EDGE = 3,
|
|
|
|
ORIENTATION_FACE = 4,
|
|
|
|
};
|
2018-09-07 11:24:37 +10:00
|
|
|
#define ORIENTATION_USE_PLANE(ty) \
|
|
|
|
ELEM(ty, ORIENTATION_NORMAL, ORIENTATION_EDGE, ORIENTATION_FACE)
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
|
2015-09-09 02:05:10 +10:00
|
|
|
int getTransformOrientation_ex(const struct bContext *C, float normal[3], float plane[3], const short around);
|
|
|
|
int getTransformOrientation(const struct bContext *C, float normal[3], float plane[3]);
|
2009-11-06 10:38:00 +00:00
|
|
|
|
2018-06-05 23:21:08 +05:30
|
|
|
void freeCustomNormalArray(TransInfo *t, TransDataContainer *tc, TransCustomData *custom_data);
|
2018-05-25 22:24:24 +05:30
|
|
|
|
2013-01-13 05:19:47 +00:00
|
|
|
void freeEdgeSlideTempFaces(EdgeSlideData *sld);
|
2018-04-16 16:27:55 +02:00
|
|
|
void freeEdgeSlideVerts(TransInfo *t, TransDataContainer *tc, TransCustomData *custom_data);
|
2013-01-13 05:19:47 +00:00
|
|
|
void projectEdgeSlideData(TransInfo *t, bool is_final);
|
2009-09-22 08:41:03 +00:00
|
|
|
|
2015-01-12 02:18:20 +11:00
|
|
|
void freeVertSlideTempFaces(VertSlideData *sld);
|
2018-04-16 16:27:55 +02:00
|
|
|
void freeVertSlideVerts(TransInfo *t, TransDataContainer *tc, TransCustomData *custom_data);
|
2015-01-12 02:18:20 +11:00
|
|
|
void projectVertSlideData(TransInfo *t, bool is_final);
|
2013-01-13 14:08:53 +00:00
|
|
|
|
2013-02-18 16:35:13 +00:00
|
|
|
|
2018-06-30 10:29:40 +02:00
|
|
|
/* TODO. transform_query.c */
|
2013-05-01 05:26:10 +00:00
|
|
|
bool checkUseAxisMatrix(TransInfo *t);
|
2013-02-18 16:35:13 +00:00
|
|
|
|
2016-04-21 11:29:32 +10:00
|
|
|
#define TRANSFORM_SNAP_MAX_PX 100.0f
|
|
|
|
#define TRANSFORM_DIST_INVALID -FLT_MAX
|
|
|
|
|
2018-04-16 16:27:55 +02:00
|
|
|
/* Temp macros. */
|
|
|
|
|
|
|
|
#define TRANS_DATA_CONTAINER_FIRST_OK(t) (&(t)->data_container[0])
|
|
|
|
/* For cases we _know_ there is only one handle. */
|
|
|
|
#define TRANS_DATA_CONTAINER_FIRST_SINGLE(t) (BLI_assert((t)->data_container_len == 1), (&(t)->data_container[0]))
|
|
|
|
|
|
|
|
#define FOREACH_TRANS_DATA_CONTAINER(t, th) \
|
|
|
|
for (TransDataContainer *tc = t->data_container, *tc_end = t->data_container + t->data_container_len; \
|
|
|
|
th != tc_end; \
|
|
|
|
th++)
|
|
|
|
|
|
|
|
#define FOREACH_TRANS_DATA_CONTAINER_INDEX(t, th, i) \
|
|
|
|
for (TransDataContainer *tc = ((i = 0), t->data_container), *tc_end = t->data_container + t->data_container_len; \
|
|
|
|
th != tc_end; \
|
|
|
|
th++, i++)
|
|
|
|
|
2.5
Transform:
First working port of the transform code:
- Object mode only (other conversions need to be ported)
- Contraints (global and local only) working
- Snap (no edit mode, obviously) working
- Numinput working
- Gears (Ctrl and Shift) working
- Only grap, rotate, scale, shear, warp and to sphere have been added as hotkey, but the rest should work too once accessible
- No manipulator
- No drawn feedback other than moving stuff and header print (no constraint line, snap circle, ...)
- No NDOF support
I've only tested Scons support, though Makefil *should* work, I *think*.
Misc:
-QuatIsNull function in arith
-Exporting project_* and view[line|ray] functions from view3d
2008-12-29 01:41:28 +00:00
|
|
|
#endif
|