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
|
|
|
* ***** BEGIN GPL LICENSE BLOCK *****
|
|
|
|
|
*
|
|
|
|
|
* This program is free software; you can redistribute it and/or
|
|
|
|
|
* modify it under the terms of the GNU General Public License
|
|
|
|
|
* as published by the Free Software Foundation; either version 2
|
|
|
|
|
* of the License, or (at your option) any later version.
|
|
|
|
|
*
|
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
|
*
|
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
|
* along with this program; if not, write to the Free Software Foundation,
|
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.
|
|
|
|
|
*
|
|
|
|
|
* The Original Code is: all of this file.
|
|
|
|
|
*
|
|
|
|
|
* Contributor(s): Martin Poirier
|
|
|
|
|
*
|
|
|
|
|
* ***** END GPL LICENSE BLOCK *****
|
|
|
|
|
*/
|
2011-02-27 20:29:51 +00:00
|
|
|
|
|
|
|
|
/** \file blender/editors/transform/transform_snap.c
|
|
|
|
|
* \ingroup edtransform
|
|
|
|
|
*/
|
|
|
|
|
|
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
|
|
|
#include <stdlib.h>
|
|
|
|
|
#include <math.h>
|
|
|
|
|
#include <float.h>
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
|
|
#include "PIL_time.h"
|
|
|
|
|
|
|
|
|
|
#include "DNA_scene_types.h"
|
2010-08-04 04:01:27 +00:00
|
|
|
#include "DNA_object_types.h"
|
2012-07-18 23:07:07 +00:00
|
|
|
#include "DNA_meshdata_types.h" /* Temporary, for snapping to other unselected meshes */
|
2012-06-29 14:34:46 +00:00
|
|
|
#include "DNA_node_types.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
|
|
|
#include "DNA_space_types.h"
|
|
|
|
|
#include "DNA_screen_types.h"
|
|
|
|
|
#include "DNA_view3d_types.h"
|
2009-03-29 19:52:53 +00:00
|
|
|
#include "DNA_windowmanager_types.h"
|
|
|
|
|
|
2009-11-10 20:43:45 +00:00
|
|
|
#include "BLI_math.h"
|
2009-02-24 00:45:40 +00:00
|
|
|
#include "BLI_blenlib.h"
|
2011-01-07 18:36:47 +00:00
|
|
|
#include "BLI_utildefines.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-02-02 03:14:52 -02:00
|
|
|
#include "GPU_immediate.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
|
|
|
|
|
|
|
|
#include "BKE_DerivedMesh.h"
|
2013-12-26 17:24:42 +06:00
|
|
|
#include "BKE_global.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
|
|
|
#include "BKE_object.h"
|
2012-07-18 23:07:07 +00:00
|
|
|
#include "BKE_anim.h" /* for duplis */
|
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
|
|
|
#include "BKE_context.h"
|
2013-04-13 20:31:52 +00:00
|
|
|
#include "BKE_editmesh.h"
|
2014-11-24 18:18:35 +01:00
|
|
|
#include "BKE_sequencer.h"
|
2013-12-26 17:24:42 +06:00
|
|
|
#include "BKE_main.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
|
|
|
|
2013-03-07 02:44:55 +00:00
|
|
|
#include "RNA_access.h"
|
|
|
|
|
|
|
|
|
|
#include "WM_types.h"
|
|
|
|
|
|
2009-01-28 21:43:43 +00:00
|
|
|
#include "ED_image.h"
|
2012-06-29 14:34:46 +00:00
|
|
|
#include "ED_node.h"
|
2009-01-28 21:43:43 +00:00
|
|
|
#include "ED_uvedit.h"
|
|
|
|
|
#include "ED_view3d.h"
|
2016-05-06 04:49:21 +10:00
|
|
|
#include "ED_transform_snap_object_context.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-01-10 18:33:16 +00:00
|
|
|
#include "UI_resources.h"
|
2009-01-28 21:43:43 +00:00
|
|
|
#include "UI_view2d.h"
|
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
|
|
|
#include "MEM_guardedalloc.h"
|
|
|
|
|
|
|
|
|
|
#include "transform.h"
|
2009-01-10 18:33:16 +00:00
|
|
|
|
2013-04-03 09:48:21 +00:00
|
|
|
/* this should be passed as an arg for use in snap functions */
|
|
|
|
|
#undef BASACT
|
|
|
|
|
|
2013-04-11 10:17:06 +00:00
|
|
|
/* use half of flt-max so we can scale up without an exception */
|
2012-10-05 01:34:47 +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
|
|
|
/********************* PROTOTYPES ***********************/
|
|
|
|
|
|
2011-11-15 16:38:48 +00:00
|
|
|
static void setSnappingCallback(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
|
|
|
|
2011-11-15 16:38:48 +00:00
|
|
|
static void ApplySnapTranslation(TransInfo *t, float vec[3]);
|
|
|
|
|
static void ApplySnapRotation(TransInfo *t, float *vec);
|
2011-11-19 00:52:54 +00:00
|
|
|
static void ApplySnapResize(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
|
|
|
|
2011-11-19 00:52:54 +00:00
|
|
|
/* static void CalcSnapGrid(TransInfo *t, float *vec); */
|
2011-11-15 16:38:48 +00:00
|
|
|
static void CalcSnapGeometry(TransInfo *t, float *vec);
|
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
|
|
|
|
2011-11-15 16:38:48 +00:00
|
|
|
static void TargetSnapMedian(TransInfo *t);
|
|
|
|
|
static void TargetSnapCenter(TransInfo *t);
|
|
|
|
|
static void TargetSnapClosest(TransInfo *t);
|
|
|
|
|
static void TargetSnapActive(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
|
|
|
|
2014-04-17 02:53:11 +10:00
|
|
|
static float RotationBetween(TransInfo *t, const float p1[3], const float p2[3]);
|
|
|
|
|
static float TranslationBetween(TransInfo *t, const float p1[3], const float p2[3]);
|
|
|
|
|
static float ResizeBetween(TransInfo *t, const float p1[3], const float p2[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
|
|
|
|
|
|
|
|
|
|
|
|
|
/****************** IMPLEMENTATIONS *********************/
|
|
|
|
|
|
2015-12-02 18:08:48 +11:00
|
|
|
static bool snapNodeTest(View2D *v2d, bNode *node, SnapSelect snap_select);
|
2012-06-29 14:34:46 +00:00
|
|
|
static NodeBorder snapNodeBorder(int snap_node_mode);
|
|
|
|
|
|
2011-02-07 12:07:26 +00:00
|
|
|
#if 0
|
2008-12-31 22:43:29 +00:00
|
|
|
int BIF_snappingSupported(Object *obedit)
|
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
|
|
|
{
|
|
|
|
|
int status = 0;
|
|
|
|
|
|
2014-07-20 01:30:29 +10:00
|
|
|
/* only support object mesh, armature, curves */
|
|
|
|
|
if (obedit == NULL || ELEM(obedit->type, OB_MESH, OB_ARMATURE, OB_CURVE, OB_LATTICE, OB_MBALL)) {
|
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
|
|
|
status = 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return status;
|
|
|
|
|
}
|
2011-02-07 12:07:26 +00:00
|
|
|
#endif
|
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-04-04 09:20:46 +00:00
|
|
|
bool validSnap(TransInfo *t)
|
2009-12-03 19:18:00 +00:00
|
|
|
{
|
2012-06-10 22:13:17 +00:00
|
|
|
return (t->tsnap.status & (POINT_INIT | TARGET_INIT)) == (POINT_INIT | TARGET_INIT) ||
|
|
|
|
|
(t->tsnap.status & (MULTI_POINTS | TARGET_INIT)) == (MULTI_POINTS | TARGET_INIT);
|
2009-12-01 18:26:18 +00:00
|
|
|
}
|
|
|
|
|
|
2013-04-04 09:20:46 +00:00
|
|
|
bool activeSnap(TransInfo *t)
|
2009-12-03 19:18:00 +00:00
|
|
|
{
|
2013-10-01 12:35:43 +00:00
|
|
|
return ((t->modifiers & (MOD_SNAP | MOD_SNAP_INVERT)) == MOD_SNAP) ||
|
|
|
|
|
((t->modifiers & (MOD_SNAP | MOD_SNAP_INVERT)) == MOD_SNAP_INVERT);
|
2009-12-03 19:18:00 +00:00
|
|
|
}
|
|
|
|
|
|
2009-03-28 20:46:38 +00:00
|
|
|
void drawSnapping(const 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
|
|
|
{
|
2012-06-29 14:34:46 +00:00
|
|
|
unsigned char col[4], selectedCol[4], activeCol[4];
|
|
|
|
|
|
|
|
|
|
if (!activeSnap(t))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
UI_GetThemeColor3ubv(TH_TRANSFORM, col);
|
|
|
|
|
col[3] = 128;
|
|
|
|
|
|
|
|
|
|
UI_GetThemeColor3ubv(TH_SELECT, selectedCol);
|
|
|
|
|
selectedCol[3] = 128;
|
|
|
|
|
|
|
|
|
|
UI_GetThemeColor3ubv(TH_ACTIVE, activeCol);
|
|
|
|
|
activeCol[3] = 192;
|
|
|
|
|
|
|
|
|
|
if (t->spacetype == SPACE_VIEW3D) {
|
|
|
|
|
if (validSnap(t)) {
|
2009-12-01 18:26:18 +00:00
|
|
|
TransSnapPoint *p;
|
2009-03-28 20:46:38 +00:00
|
|
|
View3D *v3d = CTX_wm_view3d(C);
|
|
|
|
|
RegionView3D *rv3d = CTX_wm_region_view3d(C);
|
2010-09-28 10:03:56 +00:00
|
|
|
float imat[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 size;
|
|
|
|
|
|
|
|
|
|
glDisable(GL_DEPTH_TEST);
|
2012-06-29 14:34:46 +00:00
|
|
|
|
2010-11-05 05:26:34 +00:00
|
|
|
size = 2.5f * UI_GetThemeValuef(TH_VERTEX_SIZE);
|
2012-06-29 14:34:46 +00:00
|
|
|
|
2010-09-28 10:03:56 +00:00
|
|
|
invert_m4_m4(imat, rv3d->viewmat);
|
2017-02-02 03:14:52 -02:00
|
|
|
|
|
|
|
|
unsigned pos = add_attrib(immVertexFormat(), "pos", GL_FLOAT, 3, KEEP_FLOAT);
|
|
|
|
|
|
|
|
|
|
immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
|
|
|
|
|
|
2009-12-01 18:26:18 +00:00
|
|
|
for (p = t->tsnap.points.first; p; p = p->next) {
|
2011-12-26 20:23:07 +00:00
|
|
|
if (p == t->tsnap.selectedPoint) {
|
2017-02-02 03:14:52 -02:00
|
|
|
immUniformColor4ubv(selectedCol);
|
2012-03-24 06:38:07 +00:00
|
|
|
}
|
|
|
|
|
else {
|
2017-02-02 03:14:52 -02:00
|
|
|
immUniformColor4ubv(col);
|
2011-12-26 20:23:07 +00:00
|
|
|
}
|
2012-06-29 14:34:46 +00:00
|
|
|
|
2017-02-02 03:14:52 -02:00
|
|
|
imm_drawcircball(p->co, ED_view3d_pixel_size(rv3d, p->co) * size * 0.75f, imat, pos);
|
2009-12-01 18:26:18 +00:00
|
|
|
}
|
2012-06-29 14:34:46 +00:00
|
|
|
|
2009-12-01 18:26:18 +00:00
|
|
|
if (t->tsnap.status & POINT_INIT) {
|
2017-02-02 03:14:52 -02:00
|
|
|
immUniformColor4ubv(activeCol);
|
2012-06-29 14:34:46 +00:00
|
|
|
|
2017-02-02 03:14:52 -02:00
|
|
|
imm_drawcircball(t->tsnap.snapPoint, ED_view3d_pixel_size(rv3d, t->tsnap.snapPoint) * size, imat, pos);
|
2009-12-01 18:26:18 +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
|
|
|
|
|
|
|
|
/* draw normal if needed */
|
2012-04-28 06:31:57 +00:00
|
|
|
if (usingSnappingNormal(t) && validSnappingNormal(t)) {
|
2017-02-02 03:14:52 -02:00
|
|
|
immUniformColor4ubv(activeCol);
|
2012-06-29 14:34:46 +00:00
|
|
|
|
2017-02-02 03:14:52 -02:00
|
|
|
immBegin(GL_LINES, 2);
|
|
|
|
|
immVertex3f(pos, t->tsnap.snapPoint[0], t->tsnap.snapPoint[1], t->tsnap.snapPoint[2]);
|
|
|
|
|
immVertex3f(pos, t->tsnap.snapPoint[0] + t->tsnap.snapNormal[0],
|
|
|
|
|
t->tsnap.snapPoint[1] + t->tsnap.snapNormal[1],
|
|
|
|
|
t->tsnap.snapPoint[2] + t->tsnap.snapNormal[2]);
|
|
|
|
|
immEnd();
|
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-02-02 03:14:52 -02:00
|
|
|
|
|
|
|
|
immUnbindProgram();
|
|
|
|
|
|
2012-03-24 06:38:07 +00:00
|
|
|
if (v3d->zbuf)
|
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
|
|
|
glEnable(GL_DEPTH_TEST);
|
|
|
|
|
}
|
2012-06-29 14:34:46 +00:00
|
|
|
}
|
|
|
|
|
else if (t->spacetype == SPACE_IMAGE) {
|
|
|
|
|
if (validSnap(t)) {
|
2012-03-03 16:31:46 +00:00
|
|
|
/* This will not draw, and Im nor sure why - campbell */
|
|
|
|
|
#if 0
|
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 xuser_asp, yuser_asp;
|
|
|
|
|
int wi, hi;
|
|
|
|
|
float w, h;
|
|
|
|
|
|
2012-06-10 22:13:17 +00:00
|
|
|
calc_image_view(G.sima, 'f'); // float
|
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
|
|
|
myortho2(G.v2d->cur.xmin, G.v2d->cur.xmax, G.v2d->cur.ymin, G.v2d->cur.ymax);
|
|
|
|
|
glLoadIdentity();
|
|
|
|
|
|
2012-07-25 16:30:53 +00:00
|
|
|
ED_space_image_get_aspect(t->sa->spacedata.first, &xuser_aspx, &yuser_asp);
|
2009-01-28 21:43:43 +00:00
|
|
|
ED_space_image_width(t->sa->spacedata.first, &wi, &hi);
|
2012-07-25 19:36:59 +00:00
|
|
|
w = (((float)wi) / IMG_SIZE_FALLBACK) * G.sima->zoom * xuser_asp;
|
|
|
|
|
h = (((float)hi) / IMG_SIZE_FALLBACK) * G.sima->zoom * yuser_asp;
|
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
|
|
|
|
|
|
|
|
cpack(0xFFFFFF);
|
2015-09-20 18:11:25 +02:00
|
|
|
glTranslate2fv(t->tsnap.snapPoint);
|
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
|
|
|
|
2012-04-29 15:47:02 +00:00
|
|
|
//glRectf(0, 0, 1, 1);
|
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
|
|
|
|
|
|
|
|
setlinestyle(0);
|
|
|
|
|
cpack(0x0);
|
2012-06-10 22:13:17 +00:00
|
|
|
fdrawline(-0.020 / w, 0, -0.1 / w, 0);
|
2012-06-17 09:58:26 +00:00
|
|
|
fdrawline(0.1 / w, 0, 0.020 / w, 0);
|
2012-06-10 22:13:17 +00:00
|
|
|
fdrawline(0, -0.020 / h, 0, -0.1 / h);
|
|
|
|
|
fdrawline(0, 0.1 / h, 0, 0.020 / 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
|
|
|
|
|
|
|
|
glTranslatef(-t->tsnap.snapPoint[0], -t->tsnap.snapPoint[1], 0.0f);
|
|
|
|
|
setlinestyle(0);
|
2012-03-03 16:31:46 +00:00
|
|
|
#endif
|
2012-06-29 14:34:46 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (t->spacetype == SPACE_NODE) {
|
|
|
|
|
if (validSnap(t)) {
|
|
|
|
|
ARegion *ar = CTX_wm_region(C);
|
|
|
|
|
TransSnapPoint *p;
|
|
|
|
|
float size;
|
|
|
|
|
|
|
|
|
|
size = 2.5f * UI_GetThemeValuef(TH_VERTEX_SIZE);
|
|
|
|
|
|
|
|
|
|
glEnable(GL_BLEND);
|
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-02-02 03:14:52 -02:00
|
|
|
unsigned pos = add_attrib(immVertexFormat(), "pos", GL_FLOAT, 2, KEEP_FLOAT);
|
|
|
|
|
|
2017-02-02 23:17:22 -02:00
|
|
|
immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
|
2017-02-02 03:14:52 -02:00
|
|
|
|
2012-06-29 14:34:46 +00:00
|
|
|
for (p = t->tsnap.points.first; p; p = p->next) {
|
|
|
|
|
if (p == t->tsnap.selectedPoint) {
|
2017-02-02 03:14:52 -02:00
|
|
|
immUniformColor4ubv(selectedCol);
|
2012-06-29 14:34:46 +00:00
|
|
|
}
|
|
|
|
|
else {
|
2017-02-02 03:14:52 -02:00
|
|
|
immUniformColor4ubv(col);
|
2012-06-29 14:34:46 +00:00
|
|
|
}
|
|
|
|
|
|
2017-02-02 03:14:52 -02:00
|
|
|
ED_node_draw_snap(&ar->v2d, p->co, size, 0, pos);
|
2012-06-29 14:34:46 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (t->tsnap.status & POINT_INIT) {
|
2017-02-02 03:14:52 -02:00
|
|
|
immUniformColor4ubv(activeCol);
|
2012-06-29 14:34:46 +00:00
|
|
|
|
2017-02-02 03:14:52 -02:00
|
|
|
ED_node_draw_snap(&ar->v2d, t->tsnap.snapPoint, size, t->tsnap.snapNodeBorder, pos);
|
2012-06-29 14:34:46 +00:00
|
|
|
}
|
2017-02-02 03:14:52 -02:00
|
|
|
|
|
|
|
|
immUnbindProgram();
|
|
|
|
|
|
2012-06-29 14:34:46 +00:00
|
|
|
glDisable(GL_BLEND);
|
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-10-23 06:48:36 +00:00
|
|
|
eRedrawFlag handleSnapping(TransInfo *t, const wmEvent *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
|
|
|
{
|
2013-10-23 06:48:36 +00:00
|
|
|
eRedrawFlag status = TREDRAW_NOTHING;
|
2009-11-26 19:47:55 +00:00
|
|
|
|
|
|
|
|
#if 0 // XXX need a proper selector for all snap mode
|
2012-04-28 06:31:57 +00:00
|
|
|
if (BIF_snappingSupported(t->obedit) && event->type == TABKEY && event->shift) {
|
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
|
|
|
/* toggle snap and reinit */
|
2009-06-23 00:41:55 +00:00
|
|
|
t->settings->snap_flag ^= SCE_SNAP;
|
2009-03-29 19:52:53 +00:00
|
|
|
initSnapping(t, NULL);
|
2013-10-23 06:48:36 +00:00
|
|
|
status = TREDRAW_HARD;
|
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-11-26 19:47:55 +00:00
|
|
|
#endif
|
2012-04-28 06:31:57 +00:00
|
|
|
if (event->type == MOUSEMOVE) {
|
2011-12-26 20:23:07 +00:00
|
|
|
status |= updateSelectedSnapPoint(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
|
|
|
|
|
|
|
|
return status;
|
|
|
|
|
}
|
|
|
|
|
|
2009-10-22 23:22:05 +00:00
|
|
|
void applyProject(TransInfo *t)
|
|
|
|
|
{
|
|
|
|
|
/* XXX FLICKER IN OBJECT MODE */
|
2013-12-19 04:54:11 +11:00
|
|
|
if ((t->tsnap.project) && activeSnap(t) && (t->flag & T_NO_PROJECT) == 0) {
|
2009-10-22 23:22:05 +00:00
|
|
|
TransData *td = t->data;
|
|
|
|
|
float tvec[3];
|
|
|
|
|
float imat[4][4];
|
|
|
|
|
int i;
|
|
|
|
|
|
2012-06-10 22:13:17 +00:00
|
|
|
if (t->flag & (T_EDIT | T_POSE)) {
|
|
|
|
|
Object *ob = t->obedit ? t->obedit : t->poseobj;
|
2009-11-10 20:43:45 +00:00
|
|
|
invert_m4_m4(imat, ob->obmat);
|
2009-10-22 23:22:05 +00:00
|
|
|
}
|
|
|
|
|
|
2012-06-10 22:13:17 +00:00
|
|
|
for (i = 0; i < t->total; i++, td++) {
|
2009-10-22 23:22:05 +00:00
|
|
|
float iloc[3], loc[3], no[3];
|
2013-04-03 07:36:37 +00:00
|
|
|
float mval_fl[2];
|
|
|
|
|
float dist_px = TRANSFORM_DIST_MAX_PX;
|
2009-10-22 23:22:05 +00:00
|
|
|
|
|
|
|
|
if (td->flag & TD_NOACTION)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
if (td->flag & TD_SKIP)
|
|
|
|
|
continue;
|
2013-02-19 16:57:04 +00:00
|
|
|
|
|
|
|
|
if ((t->flag & T_PROP_EDIT) && (td->factor == 0.0f))
|
|
|
|
|
continue;
|
2009-10-22 23:22:05 +00:00
|
|
|
|
2011-09-12 04:14:12 +00:00
|
|
|
copy_v3_v3(iloc, td->loc);
|
2012-06-10 22:13:17 +00:00
|
|
|
if (t->flag & (T_EDIT | T_POSE)) {
|
|
|
|
|
Object *ob = t->obedit ? t->obedit : t->poseobj;
|
2009-11-10 20:43:45 +00:00
|
|
|
mul_m4_v3(ob->obmat, iloc);
|
2009-10-22 23:22:05 +00:00
|
|
|
}
|
2012-03-07 04:53:43 +00:00
|
|
|
else if (t->flag & T_OBJECT) {
|
2013-12-26 17:24:42 +06:00
|
|
|
/* TODO(sergey): Ideally force update is not needed here. */
|
2012-06-10 22:13:17 +00:00
|
|
|
td->ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
|
2013-12-26 17:24:42 +06:00
|
|
|
BKE_object_handle_update(G.main->eval_ctx, t->scene, td->ob);
|
2011-09-12 04:14:12 +00:00
|
|
|
copy_v3_v3(iloc, td->ob->obmat[3]);
|
2009-10-22 23:22:05 +00:00
|
|
|
}
|
|
|
|
|
|
2013-04-03 07:36:37 +00:00
|
|
|
if (ED_view3d_project_float_global(t->ar, iloc, mval_fl, V3D_PROJ_TEST_NOP) == V3D_PROJ_RET_OK) {
|
2015-12-02 18:08:48 +11:00
|
|
|
if (snapObjectsTransform(
|
2016-06-03 16:54:58 +10:00
|
|
|
t, mval_fl, &dist_px,
|
2016-04-21 11:29:32 +10:00
|
|
|
loc, no))
|
2015-12-02 18:08:48 +11:00
|
|
|
{
|
2012-10-05 03:20:14 +00:00
|
|
|
// if (t->flag & (T_EDIT|T_POSE)) {
|
|
|
|
|
// mul_m4_v3(imat, loc);
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
sub_v3_v3v3(tvec, loc, iloc);
|
|
|
|
|
|
|
|
|
|
mul_m3_v3(td->smtx, tvec);
|
|
|
|
|
|
2013-02-20 00:44:18 +00:00
|
|
|
add_v3_v3(td->loc, tvec);
|
2014-07-31 17:02:03 +02:00
|
|
|
|
2014-08-08 19:35:09 +02:00
|
|
|
if (t->tsnap.align && (t->flag & T_OBJECT)) {
|
2014-07-31 17:02:03 +02:00
|
|
|
/* handle alignment as well */
|
|
|
|
|
const float *original_normal;
|
|
|
|
|
float mat[3][3];
|
|
|
|
|
|
|
|
|
|
/* In pose mode, we want to align normals with Y axis of bones... */
|
|
|
|
|
original_normal = td->axismtx[2];
|
|
|
|
|
|
2014-10-30 12:54:05 +01:00
|
|
|
rotation_between_vecs_to_mat3(mat, original_normal, no);
|
2014-07-31 17:02:03 +02:00
|
|
|
|
2015-07-14 04:27:32 +10:00
|
|
|
transform_data_ext_rotate(td, mat, true);
|
2014-07-31 17:02:03 +02:00
|
|
|
|
|
|
|
|
/* TODO support constraints for rotation too? see ElementRotation */
|
|
|
|
|
}
|
2012-10-05 03:20:14 +00:00
|
|
|
}
|
2009-10-22 23:22:05 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//XXX constraintTransLim(t, td);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-11-06 17:46:32 +00:00
|
|
|
void applyGridAbsolute(TransInfo *t)
|
|
|
|
|
{
|
|
|
|
|
float grid_size = 0.0f;
|
|
|
|
|
GearsType grid_action;
|
|
|
|
|
TransData *td;
|
2015-06-30 18:26:37 +10:00
|
|
|
float (*obmat)[4] = NULL;
|
|
|
|
|
bool use_obmat = false;
|
2013-11-06 17:46:32 +00:00
|
|
|
int i;
|
|
|
|
|
|
2015-06-30 18:57:17 +10:00
|
|
|
if (!(activeSnap(t) && (ELEM(t->tsnap.mode, SCE_SNAP_MODE_INCREMENT, SCE_SNAP_MODE_GRID))))
|
2013-11-06 17:46:32 +00:00
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
grid_action = BIG_GEARS;
|
|
|
|
|
if (t->modifiers & MOD_PRECISION)
|
|
|
|
|
grid_action = SMALL_GEARS;
|
|
|
|
|
|
|
|
|
|
switch (grid_action) {
|
2015-06-30 18:57:17 +10:00
|
|
|
case NO_GEARS: grid_size = t->snap_spatial[0]; break;
|
|
|
|
|
case BIG_GEARS: grid_size = t->snap_spatial[1]; break;
|
|
|
|
|
case SMALL_GEARS: grid_size = t->snap_spatial[2]; break;
|
2013-11-06 17:46:32 +00:00
|
|
|
}
|
|
|
|
|
/* early exit on unusable grid size */
|
|
|
|
|
if (grid_size == 0.0f)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (t->flag & (T_EDIT | T_POSE)) {
|
|
|
|
|
Object *ob = t->obedit ? t->obedit : t->poseobj;
|
2015-06-30 18:26:37 +10:00
|
|
|
obmat = ob->obmat;
|
|
|
|
|
use_obmat = true;
|
2013-11-06 17:46:32 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (i = 0, td = t->data; i < t->total; i++, td++) {
|
|
|
|
|
float iloc[3], loc[3], tvec[3];
|
|
|
|
|
|
|
|
|
|
if (td->flag & TD_NOACTION)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
if (td->flag & TD_SKIP)
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
if ((t->flag & T_PROP_EDIT) && (td->factor == 0.0f))
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
copy_v3_v3(iloc, td->loc);
|
2015-06-30 18:26:37 +10:00
|
|
|
if (use_obmat) {
|
|
|
|
|
mul_m4_v3(obmat, iloc);
|
2013-11-06 17:46:32 +00:00
|
|
|
}
|
|
|
|
|
else if (t->flag & T_OBJECT) {
|
|
|
|
|
td->ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
|
2013-12-26 17:24:42 +06:00
|
|
|
BKE_object_handle_update(G.main->eval_ctx, t->scene, td->ob);
|
2013-11-06 17:46:32 +00:00
|
|
|
copy_v3_v3(iloc, td->ob->obmat[3]);
|
|
|
|
|
}
|
|
|
|
|
|
2013-11-17 22:00:57 +11:00
|
|
|
mul_v3_v3fl(loc, iloc, 1.0f / grid_size);
|
2015-06-30 18:26:37 +10:00
|
|
|
loc[0] = roundf(loc[0]);
|
|
|
|
|
loc[1] = roundf(loc[1]);
|
|
|
|
|
loc[2] = roundf(loc[2]);
|
2013-11-06 17:46:32 +00:00
|
|
|
mul_v3_fl(loc, grid_size);
|
2015-06-30 18:26:37 +10:00
|
|
|
|
2013-11-06 17:46:32 +00:00
|
|
|
sub_v3_v3v3(tvec, loc, iloc);
|
|
|
|
|
mul_m3_v3(td->smtx, tvec);
|
|
|
|
|
add_v3_v3(td->loc, tvec);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
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)
|
|
|
|
|
{
|
2009-10-22 23:22:05 +00:00
|
|
|
/* project is not applied this way */
|
|
|
|
|
if (t->tsnap.project)
|
|
|
|
|
return;
|
|
|
|
|
|
2012-04-28 06:31:57 +00:00
|
|
|
if (t->tsnap.status & SNAP_FORCED) {
|
2009-03-29 19:52:53 +00:00
|
|
|
t->tsnap.targetSnap(t);
|
|
|
|
|
|
|
|
|
|
t->tsnap.applySnap(t, vec);
|
|
|
|
|
}
|
2015-06-27 15:30:17 +10:00
|
|
|
else if (!ELEM(t->tsnap.mode, SCE_SNAP_MODE_INCREMENT, SCE_SNAP_MODE_GRID) && activeSnap(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
|
|
|
double current = PIL_check_seconds_timer();
|
|
|
|
|
|
|
|
|
|
// Time base quirky code to go around findnearest slowness
|
|
|
|
|
/* !TODO! add exception for object mode, no need to slow it down then */
|
2012-05-20 19:49:27 +00:00
|
|
|
if (current - t->tsnap.last >= 0.01) {
|
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
|
|
|
t->tsnap.calcSnap(t, vec);
|
|
|
|
|
t->tsnap.targetSnap(t);
|
|
|
|
|
|
|
|
|
|
t->tsnap.last = current;
|
|
|
|
|
}
|
2012-04-28 06:31:57 +00:00
|
|
|
if (validSnap(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
|
|
|
t->tsnap.applySnap(t, vec);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void resetSnapping(TransInfo *t)
|
|
|
|
|
{
|
|
|
|
|
t->tsnap.status = 0;
|
2013-04-04 09:20:46 +00:00
|
|
|
t->tsnap.align = false;
|
2009-12-10 22:07:33 +00:00
|
|
|
t->tsnap.project = 0;
|
2009-11-26 19:47:55 +00:00
|
|
|
t->tsnap.mode = 0;
|
|
|
|
|
t->tsnap.modeSelect = 0;
|
2009-12-03 19:18:00 +00:00
|
|
|
t->tsnap.target = 0;
|
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
|
|
|
t->tsnap.last = 0;
|
|
|
|
|
t->tsnap.applySnap = NULL;
|
|
|
|
|
|
|
|
|
|
t->tsnap.snapNormal[0] = 0;
|
|
|
|
|
t->tsnap.snapNormal[1] = 0;
|
|
|
|
|
t->tsnap.snapNormal[2] = 0;
|
2012-06-29 14:34:46 +00:00
|
|
|
|
|
|
|
|
t->tsnap.snapNodeBorder = 0;
|
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-04-04 09:20:46 +00:00
|
|
|
bool usingSnappingNormal(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
|
|
|
{
|
2009-03-29 19:52:53 +00:00
|
|
|
return t->tsnap.align;
|
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-04-04 09:20:46 +00:00
|
|
|
bool validSnappingNormal(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
|
|
|
{
|
2012-04-28 06:31:57 +00:00
|
|
|
if (validSnap(t)) {
|
2014-03-29 22:23:27 +11:00
|
|
|
if (!is_zero_v3(t->tsnap.snapNormal)) {
|
2013-04-04 09:20:46 +00:00
|
|
|
return true;
|
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-04-04 09:20:46 +00:00
|
|
|
return false;
|
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-06 07:44:07 +10:00
|
|
|
static bool bm_edge_is_snap_target(BMEdge *e, void *UNUSED(user_data))
|
|
|
|
|
{
|
|
|
|
|
if (BM_elem_flag_test(e, BM_ELEM_SELECT | BM_ELEM_HIDDEN) ||
|
|
|
|
|
BM_elem_flag_test(e->v1, BM_ELEM_SELECT) ||
|
|
|
|
|
BM_elem_flag_test(e->v2, BM_ELEM_SELECT))
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static bool bm_face_is_snap_target(BMFace *f, void *UNUSED(user_data))
|
|
|
|
|
{
|
|
|
|
|
if (BM_elem_flag_test(f, BM_ELEM_SELECT | BM_ELEM_HIDDEN)) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BMLoop *l_iter, *l_first;
|
|
|
|
|
l_iter = l_first = BM_FACE_FIRST_LOOP(f);
|
|
|
|
|
do {
|
|
|
|
|
if (BM_elem_flag_test(l_iter->v, BM_ELEM_SELECT)) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
} while ((l_iter = l_iter->next) != l_first);
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
2011-02-14 17:55:27 +00:00
|
|
|
static void initSnappingMode(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
|
|
|
{
|
2009-06-23 00:41:55 +00:00
|
|
|
ToolSettings *ts = t->settings;
|
2009-01-03 17:21:32 +00:00
|
|
|
Object *obedit = t->obedit;
|
2009-11-01 00:06:53 +00:00
|
|
|
Scene *scene = t->scene;
|
Render Layers and Collections (merge from render-layers)
Design Documents
----------------
* https://wiki.blender.org/index.php/Dev:2.8/Source/Layers
* https://wiki.blender.org/index.php/Dev:2.8/Source/DataDesignRevised
User Commit Log
---------------
* New Layer and Collection system to replace render layers and viewport layers.
* A layer is a set of collections of objects (and their drawing options) required for specific tasks.
* A collection is a set of objects, equivalent of the old layers in Blender. A collection can be shared across multiple layers.
* All Scenes have a master collection that all other collections are children of.
* New collection "context" tab (in Properties Editor)
* New temporary viewport "collections" panel to control per-collection
visibility
Missing User Features
---------------------
* Collection "Filter"
Option to add objects based on their names
* Collection Manager operators
The existing buttons are placeholders
* Collection Manager drawing
The editor main region is empty
* Collection Override
* Per-Collection engine settings
This will come as a separate commit, as part of the clay-engine branch
Dev Commit Log
--------------
* New DNA file (DNA_layer_types.h) with the new structs
We are replacing Base by a new extended Base while keeping it backward
compatible with some legacy settings (i.e., lay, flag_legacy).
Renamed all Base to BaseLegacy to make it clear the areas of code that
still need to be converted
Note: manual changes were required on - deg_builder_nodes.h, rna_object.c, KX_Light.cpp
* Unittesting for main syncronization requirements
- read, write, add/copy/remove objects, copy scene, collection
link/unlinking, context)
* New Editor: Collection Manager
Based on patch by Julian Eisel
This is extracted from the layer-manager branch. With the following changes:
- Renamed references of layer manager to collections manager
- I doesn't include the editors/space_collections/ draw and util files
- The drawing code itself will be implemented separately by Julian
* Base / Object:
A little note about them. Original Blender code would try to keep them
in sync through the code, juggling flags back and forth. This will now
be handled by Depsgraph, keeping Object and Bases more separated
throughout the non-rendering code.
Scene.base is being cleared in doversion, and the old viewport drawing
code was poorly converted to use the new bases while the new viewport
code doesn't get merged and replace the old one.
Python API Changes
------------------
```
- scene.layers
+ # no longer exists
- scene.objects
+ scene.scene_layers.active.objects
- scene.objects.active
+ scene.render_layers.active.objects.active
- bpy.context.scene.objects.link()
+ bpy.context.scene_collection.objects.link()
- bpy_extras.object_utils.object_data_add(context, obdata, operator=None, use_active_layer=True, name=None)
+ bpy_extras.object_utils.object_data_add(context, obdata, operator=None, name=None)
- bpy.context.object.select
+ bpy.context.object.select = True
+ bpy.context.object.select = False
+ bpy.context.object.select_get()
+ bpy.context.object.select_set(action='SELECT')
+ bpy.context.object.select_set(action='DESELECT')
-AddObjectHelper.layers
+ # no longer exists
```
2017-02-07 10:18:38 +01:00
|
|
|
BaseLegacy *base_act = scene->basact;
|
2009-10-22 23:22:05 +00:00
|
|
|
|
2012-06-29 14:34:46 +00:00
|
|
|
if (t->spacetype == SPACE_NODE) {
|
|
|
|
|
/* force project off when not supported */
|
2009-10-22 23:22:05 +00:00
|
|
|
t->tsnap.project = 0;
|
2012-06-29 14:34:46 +00:00
|
|
|
|
|
|
|
|
t->tsnap.mode = ts->snap_node_mode;
|
|
|
|
|
}
|
2012-12-03 12:03:16 +00:00
|
|
|
else if (t->spacetype == SPACE_IMAGE) {
|
|
|
|
|
/* force project off when not supported */
|
|
|
|
|
t->tsnap.project = 0;
|
|
|
|
|
|
|
|
|
|
t->tsnap.mode = ts->snap_uv_mode;
|
|
|
|
|
}
|
2012-06-29 14:34:46 +00:00
|
|
|
else {
|
|
|
|
|
/* force project off when not supported */
|
2012-12-03 12:03:16 +00:00
|
|
|
if (ts->snap_mode != SCE_SNAP_MODE_FACE)
|
2012-06-29 14:34:46 +00:00
|
|
|
t->tsnap.project = 0;
|
|
|
|
|
|
|
|
|
|
t->tsnap.mode = ts->snap_mode;
|
2009-03-29 19:52:53 +00:00
|
|
|
}
|
2009-12-03 19:18:00 +00:00
|
|
|
|
2012-05-24 16:35:45 +00:00
|
|
|
if ((t->spacetype == SPACE_VIEW3D || t->spacetype == SPACE_IMAGE) && /* Only 3D view or UV */
|
|
|
|
|
(t->flag & T_CAMERA) == 0) /* Not with camera selected in camera view */
|
|
|
|
|
{
|
2009-12-03 19:18:00 +00:00
|
|
|
setSnappingCallback(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
|
|
|
|
|
|
|
|
/* Edit mode */
|
|
|
|
|
if (t->tsnap.applySnap != NULL && // A snapping function actually exist
|
2014-07-20 01:30:29 +10:00
|
|
|
(obedit != NULL && ELEM(obedit->type, OB_MESH, OB_ARMATURE, OB_CURVE, OB_LATTICE, OB_MBALL)) ) // Temporary limited to edit mode meshes, armature, curves, mballs
|
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
|
|
|
{
|
2011-06-21 15:28:13 +00:00
|
|
|
/* Exclude editmesh if using proportional edit */
|
2012-03-06 18:40:15 +00:00
|
|
|
if ((obedit->type == OB_MESH) && (t->flag & T_PROP_EDIT)) {
|
2016-06-03 16:54:58 +10:00
|
|
|
t->tsnap.modeSelect = SNAP_NOT_ACTIVE;
|
2009-01-03 17:21:32 +00:00
|
|
|
}
|
2012-03-06 18:40:15 +00:00
|
|
|
else {
|
2016-06-03 16:54:58 +10:00
|
|
|
t->tsnap.modeSelect = t->tsnap.snap_self ? SNAP_ALL : SNAP_NOT_ACTIVE;
|
2009-01-03 17:21:32 +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
|
|
|
}
|
2009-11-01 00:06:53 +00:00
|
|
|
/* Particles edit mode*/
|
|
|
|
|
else if (t->tsnap.applySnap != NULL && // A snapping function actually exist
|
2013-04-03 09:48:21 +00:00
|
|
|
(obedit == NULL && base_act && base_act->object && base_act->object->mode & OB_MODE_PARTICLE_EDIT))
|
2009-11-01 00:06:53 +00:00
|
|
|
{
|
2009-12-03 19:18:00 +00:00
|
|
|
t->tsnap.modeSelect = SNAP_ALL;
|
2009-11-01 00:06:53 +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
|
|
|
/* Object mode */
|
|
|
|
|
else if (t->tsnap.applySnap != NULL && // A snapping function actually exist
|
2012-06-10 22:13:17 +00:00
|
|
|
(obedit == NULL) ) // Object Mode
|
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-01-30 18:30:19 -03:00
|
|
|
/* In "Edit Strokes" mode, Snap tool can perform snap to selected or active objects (see T49632)
|
|
|
|
|
* TODO: perform self snap in gpencil_strokes */
|
|
|
|
|
t->tsnap.modeSelect = ((t->options & CTX_GPENCIL_STROKES) != 0) ? SNAP_ALL : SNAP_NOT_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
|
|
|
}
|
2012-03-06 18:40:15 +00:00
|
|
|
else {
|
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
|
|
|
/* Grid if snap is not possible */
|
2009-12-03 19:18:00 +00:00
|
|
|
t->tsnap.mode = SCE_SNAP_MODE_INCREMENT;
|
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
|
|
|
}
|
|
|
|
|
}
|
2012-07-04 20:47:12 +00:00
|
|
|
else if (t->spacetype == SPACE_NODE) {
|
2012-06-29 14:34:46 +00:00
|
|
|
setSnappingCallback(t);
|
|
|
|
|
|
2012-07-04 20:47:12 +00:00
|
|
|
if (t->tsnap.applySnap != NULL) {
|
2012-06-29 14:34:46 +00:00
|
|
|
t->tsnap.modeSelect = SNAP_NOT_SELECTED;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
/* Grid if snap is not possible */
|
|
|
|
|
t->tsnap.mode = SCE_SNAP_MODE_INCREMENT;
|
|
|
|
|
}
|
|
|
|
|
}
|
2015-03-19 20:47:38 +01:00
|
|
|
else if (t->spacetype == SPACE_SEQ) {
|
|
|
|
|
/* We do our own snapping currently, so nothing here */
|
|
|
|
|
t->tsnap.mode = SCE_SNAP_MODE_GRID; /* Dummy, should we rather add a NOP mode? */
|
|
|
|
|
}
|
2012-03-06 18:40:15 +00:00
|
|
|
else {
|
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
|
|
|
/* Always grid outside of 3D view */
|
2009-12-03 19:18:00 +00:00
|
|
|
t->tsnap.mode = SCE_SNAP_MODE_INCREMENT;
|
|
|
|
|
}
|
2016-04-21 11:29:32 +10:00
|
|
|
|
2016-05-09 15:21:53 +10:00
|
|
|
if (t->spacetype == SPACE_VIEW3D) {
|
|
|
|
|
if (t->tsnap.object_context == NULL) {
|
|
|
|
|
t->tsnap.object_context = ED_transform_snap_object_context_create_view3d(
|
2017-02-03 19:03:31 -03:00
|
|
|
G.main, t->scene, 0,
|
2016-06-19 06:25:54 +10:00
|
|
|
t->ar, t->view);
|
2016-05-09 15:21:53 +10:00
|
|
|
|
|
|
|
|
ED_transform_snap_object_context_set_editmesh_callbacks(
|
2016-06-19 06:25:54 +10:00
|
|
|
t->tsnap.object_context,
|
|
|
|
|
(bool (*)(BMVert *, void *))BM_elem_cb_check_hflag_disabled,
|
|
|
|
|
bm_edge_is_snap_target,
|
|
|
|
|
bm_face_is_snap_target,
|
|
|
|
|
SET_UINT_IN_POINTER((BM_ELEM_SELECT | BM_ELEM_HIDDEN)));
|
2016-04-21 11:29:32 +10:00
|
|
|
}
|
|
|
|
|
}
|
2009-12-03 19:18:00 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void initSnapping(TransInfo *t, wmOperator *op)
|
|
|
|
|
{
|
|
|
|
|
ToolSettings *ts = t->settings;
|
2009-11-26 19:47:55 +00:00
|
|
|
short snap_target = t->settings->snap_target;
|
2009-03-29 19:52:53 +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
|
|
|
resetSnapping(t);
|
|
|
|
|
|
2009-11-27 16:15:34 +00:00
|
|
|
/* if snap property exists */
|
2012-04-28 06:31:57 +00:00
|
|
|
if (op && RNA_struct_find_property(op->ptr, "snap") && RNA_struct_property_is_set(op->ptr, "snap")) {
|
|
|
|
|
if (RNA_boolean_get(op->ptr, "snap")) {
|
2009-11-27 16:15:34 +00:00
|
|
|
t->modifiers |= MOD_SNAP;
|
|
|
|
|
|
2012-04-28 06:31:57 +00:00
|
|
|
if (RNA_struct_property_is_set(op->ptr, "snap_target")) {
|
2009-11-27 16:15:34 +00:00
|
|
|
snap_target = RNA_enum_get(op->ptr, "snap_target");
|
|
|
|
|
}
|
2009-03-29 19:52:53 +00:00
|
|
|
|
2012-04-28 06:31:57 +00:00
|
|
|
if (RNA_struct_property_is_set(op->ptr, "snap_point")) {
|
2009-11-27 16:15:34 +00:00
|
|
|
RNA_float_get_array(op->ptr, "snap_point", t->tsnap.snapPoint);
|
2012-06-10 22:13:17 +00:00
|
|
|
t->tsnap.status |= SNAP_FORCED | POINT_INIT;
|
2009-11-27 16:15:34 +00:00
|
|
|
}
|
2009-03-29 19:52:53 +00:00
|
|
|
|
|
|
|
|
/* snap align only defined in specific cases */
|
2012-04-28 06:31:57 +00:00
|
|
|
if (RNA_struct_find_property(op->ptr, "snap_align")) {
|
2009-03-29 19:52:53 +00:00
|
|
|
t->tsnap.align = RNA_boolean_get(op->ptr, "snap_align");
|
|
|
|
|
RNA_float_get_array(op->ptr, "snap_normal", t->tsnap.snapNormal);
|
2009-11-10 20:43:45 +00:00
|
|
|
normalize_v3(t->tsnap.snapNormal);
|
2009-03-29 19:52:53 +00:00
|
|
|
}
|
2009-10-12 22:33:32 +00:00
|
|
|
|
2012-04-28 06:31:57 +00:00
|
|
|
if (RNA_struct_find_property(op->ptr, "use_snap_project")) {
|
2010-08-18 03:24:52 +00:00
|
|
|
t->tsnap.project = RNA_boolean_get(op->ptr, "use_snap_project");
|
2009-10-12 22:33:32 +00:00
|
|
|
}
|
2011-06-17 13:02:23 +00:00
|
|
|
|
2012-04-28 06:31:57 +00:00
|
|
|
if (RNA_struct_find_property(op->ptr, "use_snap_self")) {
|
2011-07-27 07:22:31 +00:00
|
|
|
t->tsnap.snap_self = RNA_boolean_get(op->ptr, "use_snap_self");
|
2011-06-17 13:02:23 +00:00
|
|
|
}
|
2009-03-29 19:52:53 +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
|
|
|
}
|
2009-11-27 16:15:34 +00:00
|
|
|
/* use scene defaults only when transform is modal */
|
2012-03-07 04:53:43 +00:00
|
|
|
else if (t->flag & T_MODAL) {
|
2014-07-20 01:30:29 +10:00
|
|
|
if (ELEM(t->spacetype, SPACE_VIEW3D, SPACE_IMAGE, SPACE_NODE)) {
|
2011-07-28 02:15:58 +00:00
|
|
|
if (ts->snap_flag & SCE_SNAP) {
|
|
|
|
|
t->modifiers |= MOD_SNAP;
|
|
|
|
|
}
|
2009-11-27 16:15:34 +00:00
|
|
|
|
2014-04-17 02:53:11 +10:00
|
|
|
t->tsnap.align = ((t->settings->snap_flag & SCE_SNAP_ROTATE) != 0);
|
|
|
|
|
t->tsnap.project = ((t->settings->snap_flag & SCE_SNAP_PROJECT) != 0);
|
|
|
|
|
t->tsnap.snap_self = !((t->settings->snap_flag & SCE_SNAP_NO_SELF) != 0);
|
|
|
|
|
t->tsnap.peel = ((t->settings->snap_flag & SCE_SNAP_PROJECT) != 0);
|
2011-07-28 02:15:58 +00:00
|
|
|
}
|
2015-06-30 18:57:17 +10:00
|
|
|
|
|
|
|
|
/* for now only 3d view (others can be added if we want) */
|
|
|
|
|
if (t->spacetype == SPACE_VIEW3D) {
|
|
|
|
|
t->tsnap.snap_spatial_grid = ((t->settings->snap_flag & SCE_SNAP_ABS_GRID) != 0);
|
|
|
|
|
}
|
2009-10-12 22:33:32 +00:00
|
|
|
}
|
|
|
|
|
|
2009-12-03 19:18:00 +00:00
|
|
|
t->tsnap.target = snap_target;
|
2009-11-26 19:47:55 +00:00
|
|
|
|
2009-12-03 19:18:00 +00:00
|
|
|
initSnappingMode(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
|
|
|
}
|
|
|
|
|
|
2016-04-21 11:29:32 +10:00
|
|
|
void freeSnapping(TransInfo *t)
|
|
|
|
|
{
|
|
|
|
|
if (t->tsnap.object_context) {
|
|
|
|
|
ED_transform_snap_object_context_destroy(t->tsnap.object_context);
|
|
|
|
|
t->tsnap.object_context = NULL;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2011-11-15 16:38:48 +00:00
|
|
|
static void setSnappingCallback(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
|
|
|
{
|
|
|
|
|
t->tsnap.calcSnap = CalcSnapGeometry;
|
|
|
|
|
|
2012-04-28 06:31:57 +00:00
|
|
|
switch (t->tsnap.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
|
|
|
case SCE_SNAP_TARGET_CLOSEST:
|
|
|
|
|
t->tsnap.targetSnap = TargetSnapClosest;
|
|
|
|
|
break;
|
|
|
|
|
case SCE_SNAP_TARGET_CENTER:
|
|
|
|
|
t->tsnap.targetSnap = TargetSnapCenter;
|
|
|
|
|
break;
|
|
|
|
|
case SCE_SNAP_TARGET_MEDIAN:
|
|
|
|
|
t->tsnap.targetSnap = TargetSnapMedian;
|
|
|
|
|
break;
|
|
|
|
|
case SCE_SNAP_TARGET_ACTIVE:
|
|
|
|
|
t->tsnap.targetSnap = TargetSnapActive;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2012-04-28 06:31:57 +00:00
|
|
|
switch (t->mode) {
|
2012-06-10 22:13:17 +00:00
|
|
|
case TFM_TRANSLATION:
|
|
|
|
|
t->tsnap.applySnap = ApplySnapTranslation;
|
|
|
|
|
t->tsnap.distance = TranslationBetween;
|
|
|
|
|
break;
|
|
|
|
|
case TFM_ROTATION:
|
|
|
|
|
t->tsnap.applySnap = ApplySnapRotation;
|
|
|
|
|
t->tsnap.distance = RotationBetween;
|
|
|
|
|
|
|
|
|
|
// Can't do TARGET_CENTER with rotation, use TARGET_MEDIAN instead
|
|
|
|
|
if (t->tsnap.target == SCE_SNAP_TARGET_CENTER) {
|
|
|
|
|
t->tsnap.target = SCE_SNAP_TARGET_MEDIAN;
|
|
|
|
|
t->tsnap.targetSnap = TargetSnapMedian;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case TFM_RESIZE:
|
|
|
|
|
t->tsnap.applySnap = ApplySnapResize;
|
|
|
|
|
t->tsnap.distance = ResizeBetween;
|
|
|
|
|
|
|
|
|
|
// Can't do TARGET_CENTER with resize, use TARGET_MEDIAN instead
|
|
|
|
|
if (t->tsnap.target == SCE_SNAP_TARGET_CENTER) {
|
|
|
|
|
t->tsnap.target = SCE_SNAP_TARGET_MEDIAN;
|
|
|
|
|
t->tsnap.targetSnap = TargetSnapMedian;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
t->tsnap.applySnap = NULL;
|
|
|
|
|
break;
|
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-12-01 18:26:18 +00:00
|
|
|
void addSnapPoint(TransInfo *t)
|
|
|
|
|
{
|
2014-07-28 17:10:33 +06:00
|
|
|
/* Currently only 3D viewport works for snapping points. */
|
|
|
|
|
if (t->tsnap.status & POINT_INIT && t->spacetype == SPACE_VIEW3D) {
|
2009-12-01 18:26:18 +00:00
|
|
|
TransSnapPoint *p = MEM_callocN(sizeof(TransSnapPoint), "SnapPoint");
|
|
|
|
|
|
2011-12-26 20:23:07 +00:00
|
|
|
t->tsnap.selectedPoint = p;
|
|
|
|
|
|
2011-09-12 04:14:12 +00:00
|
|
|
copy_v3_v3(p->co, t->tsnap.snapPoint);
|
2009-12-01 18:26:18 +00:00
|
|
|
|
|
|
|
|
BLI_addtail(&t->tsnap.points, p);
|
|
|
|
|
|
|
|
|
|
t->tsnap.status |= MULTI_POINTS;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-10-23 06:48:36 +00:00
|
|
|
eRedrawFlag updateSelectedSnapPoint(TransInfo *t)
|
2011-12-26 20:23:07 +00:00
|
|
|
{
|
2013-10-23 06:48:36 +00:00
|
|
|
eRedrawFlag status = TREDRAW_NOTHING;
|
|
|
|
|
|
2011-12-26 20:23:07 +00:00
|
|
|
if (t->tsnap.status & MULTI_POINTS) {
|
|
|
|
|
TransSnapPoint *p, *closest_p = NULL;
|
2014-02-03 02:46:45 +11:00
|
|
|
float dist_min_sq = TRANSFORM_SNAP_MAX_PX;
|
2013-04-03 07:36:37 +00:00
|
|
|
const float mval_fl[2] = {t->mval[0], t->mval[1]};
|
|
|
|
|
float screen_loc[2];
|
2011-12-26 20:23:07 +00:00
|
|
|
|
2012-06-10 22:13:17 +00:00
|
|
|
for (p = t->tsnap.points.first; p; p = p->next) {
|
2014-02-03 02:46:45 +11:00
|
|
|
float dist_sq;
|
2011-12-26 20:23:07 +00:00
|
|
|
|
2013-04-03 07:36:37 +00:00
|
|
|
if (ED_view3d_project_float_global(t->ar, p->co, screen_loc, V3D_PROJ_TEST_NOP) != V3D_PROJ_RET_OK) {
|
2012-10-04 17:52:12 +00:00
|
|
|
continue;
|
|
|
|
|
}
|
2011-12-26 20:23:07 +00:00
|
|
|
|
2014-02-03 02:46:45 +11:00
|
|
|
dist_sq = len_squared_v2v2(mval_fl, screen_loc);
|
2011-12-26 20:23:07 +00:00
|
|
|
|
2014-02-03 02:46:45 +11:00
|
|
|
if (dist_sq < dist_min_sq) {
|
2011-12-26 20:23:07 +00:00
|
|
|
closest_p = p;
|
2014-02-03 02:46:45 +11:00
|
|
|
dist_min_sq = dist_sq;
|
2011-12-26 20:23:07 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (closest_p) {
|
2013-10-23 06:48:36 +00:00
|
|
|
if (t->tsnap.selectedPoint != closest_p) {
|
|
|
|
|
status = TREDRAW_HARD;
|
|
|
|
|
}
|
|
|
|
|
|
2011-12-26 20:23:07 +00:00
|
|
|
t->tsnap.selectedPoint = closest_p;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return status;
|
|
|
|
|
}
|
|
|
|
|
|
2009-12-01 18:26:18 +00:00
|
|
|
void removeSnapPoint(TransInfo *t)
|
|
|
|
|
{
|
|
|
|
|
if (t->tsnap.status & MULTI_POINTS) {
|
2011-12-26 20:23:07 +00:00
|
|
|
updateSelectedSnapPoint(t);
|
|
|
|
|
|
|
|
|
|
if (t->tsnap.selectedPoint) {
|
|
|
|
|
BLI_freelinkN(&t->tsnap.points, t->tsnap.selectedPoint);
|
|
|
|
|
|
2014-02-08 06:07:10 +11:00
|
|
|
if (BLI_listbase_is_empty(&t->tsnap.points)) {
|
2011-12-26 20:23:07 +00:00
|
|
|
t->tsnap.status &= ~MULTI_POINTS;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
t->tsnap.selectedPoint = NULL;
|
|
|
|
|
}
|
2009-12-01 18:26:18 +00:00
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void getSnapPoint(TransInfo *t, float vec[3])
|
|
|
|
|
{
|
|
|
|
|
if (t->tsnap.points.first) {
|
|
|
|
|
TransSnapPoint *p;
|
|
|
|
|
int total = 0;
|
|
|
|
|
|
|
|
|
|
vec[0] = vec[1] = vec[2] = 0;
|
|
|
|
|
|
|
|
|
|
for (p = t->tsnap.points.first; p; p = p->next, total++) {
|
|
|
|
|
add_v3_v3(vec, p->co);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (t->tsnap.status & POINT_INIT) {
|
|
|
|
|
add_v3_v3(vec, t->tsnap.snapPoint);
|
|
|
|
|
total++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mul_v3_fl(vec, 1.0f / total);
|
2012-03-24 06:38:07 +00:00
|
|
|
}
|
|
|
|
|
else {
|
2011-09-12 04:14:12 +00:00
|
|
|
copy_v3_v3(vec, t->tsnap.snapPoint);
|
2009-12-01 18:26:18 +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
|
|
|
/********************** APPLY **************************/
|
|
|
|
|
|
2011-11-15 16:38:48 +00:00
|
|
|
static void ApplySnapTranslation(TransInfo *t, 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
|
|
|
{
|
2009-12-01 18:26:18 +00:00
|
|
|
float point[3];
|
|
|
|
|
getSnapPoint(t, point);
|
2012-06-29 14:34:46 +00:00
|
|
|
|
|
|
|
|
if (t->spacetype == SPACE_NODE) {
|
|
|
|
|
char border = t->tsnap.snapNodeBorder;
|
|
|
|
|
if (border & (NODE_LEFT | NODE_RIGHT))
|
|
|
|
|
vec[0] = point[0] - t->tsnap.snapTarget[0];
|
|
|
|
|
if (border & (NODE_BOTTOM | NODE_TOP))
|
|
|
|
|
vec[1] = point[1] - t->tsnap.snapTarget[1];
|
|
|
|
|
}
|
|
|
|
|
else {
|
2016-06-21 16:17:05 +10:00
|
|
|
if (t->spacetype == SPACE_VIEW3D) {
|
|
|
|
|
if (t->options & CTX_PAINT_CURVE) {
|
|
|
|
|
if (ED_view3d_project_float_global(t->ar, point, point, V3D_PROJ_TEST_NOP) != V3D_PROJ_RET_OK) {
|
|
|
|
|
zero_v3(point); /* no good answer here... */
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2012-06-29 14:34:46 +00:00
|
|
|
sub_v3_v3v3(vec, point, t->tsnap.snapTarget);
|
|
|
|
|
}
|
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
|
|
|
}
|
|
|
|
|
|
2012-02-28 14:05:00 +00:00
|
|
|
static void ApplySnapRotation(TransInfo *t, float *value)
|
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-01-18 12:03:43 +11:00
|
|
|
float point[3];
|
|
|
|
|
getSnapPoint(t, point);
|
|
|
|
|
|
|
|
|
|
float dist = RotationBetween(t, t->tsnap.snapTarget, point);
|
|
|
|
|
*value = dist;
|
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
|
|
|
}
|
|
|
|
|
|
2011-11-15 16:38:48 +00:00
|
|
|
static void ApplySnapResize(TransInfo *t, 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
|
|
|
{
|
2016-01-18 12:03:43 +11:00
|
|
|
float point[3];
|
|
|
|
|
getSnapPoint(t, point);
|
2015-08-26 20:27:04 +10:00
|
|
|
|
2016-01-18 12:03:43 +11:00
|
|
|
float dist = ResizeBetween(t, t->tsnap.snapTarget, point);
|
2015-08-26 22:23:41 +10:00
|
|
|
copy_v3_fl(vec, dist);
|
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
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/********************** DISTANCE **************************/
|
|
|
|
|
|
2014-04-17 02:53:11 +10:00
|
|
|
static float TranslationBetween(TransInfo *UNUSED(t), const float p1[3], const float p2[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-01-18 13:15:38 +11:00
|
|
|
return len_squared_v3v3(p1, p2);
|
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-04-17 02:53:11 +10:00
|
|
|
static float RotationBetween(TransInfo *t, const float p1[3], const float p2[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-06-26 16:19:39 +10:00
|
|
|
float angle, start[3], end[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-06-26 16:19:39 +10:00
|
|
|
sub_v3_v3v3(start, p1, t->center_global);
|
|
|
|
|
sub_v3_v3v3(end, p2, t->center_global);
|
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
|
|
|
|
|
|
|
|
// Angle around a constraint axis (error prone, will need debug)
|
|
|
|
|
if (t->con.applyRot != NULL && (t->con.mode & CON_APPLY)) {
|
|
|
|
|
float axis[3], tmp[3];
|
|
|
|
|
|
|
|
|
|
t->con.applyRot(t, NULL, axis, NULL);
|
|
|
|
|
|
2009-11-10 20:43:45 +00:00
|
|
|
project_v3_v3v3(tmp, end, axis);
|
|
|
|
|
sub_v3_v3v3(end, end, tmp);
|
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-11-10 20:43:45 +00:00
|
|
|
project_v3_v3v3(tmp, start, axis);
|
|
|
|
|
sub_v3_v3v3(start, start, tmp);
|
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-11-10 20:43:45 +00:00
|
|
|
normalize_v3(end);
|
|
|
|
|
normalize_v3(start);
|
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-11-10 20:43:45 +00:00
|
|
|
cross_v3_v3v3(tmp, start, end);
|
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
|
|
|
|
2011-03-28 17:06:15 +00:00
|
|
|
if (dot_v3v3(tmp, axis) < 0.0f)
|
2014-09-17 14:11:37 +10:00
|
|
|
angle = -acosf(dot_v3v3(start, end));
|
2012-05-19 13:55:54 +00:00
|
|
|
else
|
2014-09-17 14:11:37 +10:00
|
|
|
angle = acosf(dot_v3v3(start, end));
|
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
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
float mtx[3][3];
|
|
|
|
|
|
2009-11-10 20:43:45 +00:00
|
|
|
copy_m3_m4(mtx, t->viewmat);
|
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-11-10 20:43:45 +00:00
|
|
|
mul_m3_v3(mtx, end);
|
|
|
|
|
mul_m3_v3(mtx, start);
|
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-09-17 14:11:37 +10:00
|
|
|
angle = atan2f(start[1], start[0]) - atan2f(end[1], end[0]);
|
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
|
|
|
}
|
|
|
|
|
|
2011-03-28 17:06:15 +00:00
|
|
|
if (angle > (float)M_PI) {
|
|
|
|
|
angle = angle - 2 * (float)M_PI;
|
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
|
|
|
}
|
2011-03-28 17:06:15 +00:00
|
|
|
else if (angle < -((float)M_PI)) {
|
|
|
|
|
angle = 2.0f * (float)M_PI + 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
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return angle;
|
|
|
|
|
}
|
|
|
|
|
|
2014-04-17 02:53:11 +10:00
|
|
|
static float ResizeBetween(TransInfo *t, const float p1[3], const float p2[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-06-26 16:19:39 +10:00
|
|
|
float d1[3], d2[3], len_d1;
|
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-06-26 16:19:39 +10:00
|
|
|
sub_v3_v3v3(d1, p1, t->center_global);
|
|
|
|
|
sub_v3_v3v3(d2, p2, t->center_global);
|
2015-08-26 22:23:41 +10: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
|
|
|
if (t->con.applyRot != NULL && (t->con.mode & CON_APPLY)) {
|
2009-11-10 20:43:45 +00:00
|
|
|
mul_m3_v3(t->con.pmtx, d1);
|
|
|
|
|
mul_m3_v3(t->con.pmtx, d2);
|
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-10-23 12:27:15 +11:00
|
|
|
|
|
|
|
|
project_v3_v3v3(d1, d1, d2);
|
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
|
|
|
|
2011-12-26 19:03:32 +00:00
|
|
|
len_d1 = len_v3(d1);
|
|
|
|
|
|
2015-10-16 14:45:05 +11:00
|
|
|
/* Use 'invalid' dist when `center == p1` (after projecting),
|
|
|
|
|
* in this case scale will _never_ move the point in relation to the center,
|
|
|
|
|
* so it makes no sense to take it into account when scaling. see: T46503 */
|
|
|
|
|
return len_d1 != 0.0f ? len_v3(d2) / len_d1 : TRANSFORM_DIST_INVALID;
|
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
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/********************** CALC **************************/
|
|
|
|
|
|
2013-03-08 04:00:06 +00:00
|
|
|
static void UNUSED_FUNCTION(CalcSnapGrid) (TransInfo *t, float *UNUSED(vec))
|
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-06 17:46:32 +00:00
|
|
|
snapGridIncrementAction(t, t->tsnap.snapPoint, BIG_GEARS);
|
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
|
|
|
}
|
|
|
|
|
|
2011-11-15 16:38:48 +00:00
|
|
|
static void CalcSnapGeometry(TransInfo *t, float *UNUSED(vec))
|
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
|
|
|
{
|
2012-04-28 06:31:57 +00:00
|
|
|
if (t->spacetype == SPACE_VIEW3D) {
|
2009-02-24 00:45:40 +00:00
|
|
|
float loc[3];
|
|
|
|
|
float no[3];
|
2009-10-22 23:22:05 +00:00
|
|
|
float mval[2];
|
2013-03-08 18:28:26 +00:00
|
|
|
bool found = false;
|
2013-04-03 07:36:37 +00:00
|
|
|
float dist_px = SNAP_MIN_DISTANCE; // Use a user defined value here
|
2009-10-22 23:22:05 +00:00
|
|
|
|
|
|
|
|
mval[0] = t->mval[0];
|
|
|
|
|
mval[1] = t->mval[1];
|
2009-02-24 00:45:40 +00:00
|
|
|
|
2012-04-28 06:31:57 +00:00
|
|
|
if (t->tsnap.mode == SCE_SNAP_MODE_VOLUME) {
|
2016-05-11 19:59:02 +10:00
|
|
|
found = peelObjectsTransform(
|
2016-06-03 16:54:58 +10:00
|
|
|
t, mval,
|
2016-05-11 19:59:02 +10:00
|
|
|
(t->settings->snap_flag & SCE_SNAP_PEEL_OBJECT) != 0,
|
|
|
|
|
loc, no, NULL);
|
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
|
|
|
}
|
2012-03-06 18:40:15 +00:00
|
|
|
else {
|
2015-09-02 01:25:13 +10:00
|
|
|
zero_v3(no); /* objects won't set this */
|
2015-12-02 18:08:48 +11:00
|
|
|
found = snapObjectsTransform(
|
2016-06-03 16:54:58 +10:00
|
|
|
t, mval, &dist_px,
|
2016-04-21 11:29:32 +10:00
|
|
|
loc, no);
|
2011-05-11 09:28:00 +00:00
|
|
|
}
|
|
|
|
|
|
2013-03-08 18:28:26 +00:00
|
|
|
if (found == true) {
|
2011-09-12 04:14:12 +00:00
|
|
|
copy_v3_v3(t->tsnap.snapPoint, loc);
|
|
|
|
|
copy_v3_v3(t->tsnap.snapNormal, no);
|
2008-02-27 19:35:27 +00:00
|
|
|
|
2009-02-24 00:45:40 +00:00
|
|
|
t->tsnap.status |= POINT_INIT;
|
|
|
|
|
}
|
2012-03-06 18:40:15 +00:00
|
|
|
else {
|
2009-02-24 00:45:40 +00:00
|
|
|
t->tsnap.status &= ~POINT_INIT;
|
|
|
|
|
}
|
|
|
|
|
}
|
2012-06-10 22:13:17 +00:00
|
|
|
else if (t->spacetype == SPACE_IMAGE && t->obedit != NULL && t->obedit->type == OB_MESH) {
|
2009-03-17 21:44:58 +00:00
|
|
|
/* same as above but for UV's */
|
2012-06-10 22:13:17 +00:00
|
|
|
Image *ima = ED_space_image(t->sa->spacedata.first);
|
2015-06-26 15:45:09 +10:00
|
|
|
float co[2];
|
2009-02-24 00:45:40 +00:00
|
|
|
|
2014-04-21 16:47:16 +10:00
|
|
|
UI_view2d_region_to_view(&t->ar->v2d, t->mval[0], t->mval[1], &co[0], &co[1]);
|
2008-02-27 19:35:27 +00:00
|
|
|
|
2012-04-28 06:31:57 +00:00
|
|
|
if (ED_uvedit_nearest_uv(t->scene, t->obedit, ima, co, t->tsnap.snapPoint)) {
|
2015-06-26 15:45:09 +10:00
|
|
|
t->tsnap.snapPoint[0] *= t->aspect[0];
|
|
|
|
|
t->tsnap.snapPoint[1] *= t->aspect[1];
|
2009-02-24 00:45:40 +00:00
|
|
|
|
|
|
|
|
t->tsnap.status |= POINT_INIT;
|
|
|
|
|
}
|
2012-03-06 18:40:15 +00:00
|
|
|
else {
|
2009-02-24 00:45:40 +00:00
|
|
|
t->tsnap.status &= ~POINT_INIT;
|
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
|
|
|
}
|
|
|
|
|
}
|
2012-06-29 14:34:46 +00:00
|
|
|
else if (t->spacetype == SPACE_NODE) {
|
|
|
|
|
float loc[2];
|
2013-04-03 07:36:37 +00:00
|
|
|
float dist_px = SNAP_MIN_DISTANCE; // Use a user defined value here
|
2012-06-29 14:34:46 +00:00
|
|
|
char node_border;
|
|
|
|
|
|
2015-12-02 18:08:48 +11:00
|
|
|
if (snapNodesTransform(t, t->mval, t->tsnap.modeSelect, loc, &dist_px, &node_border)) {
|
2012-06-29 14:34:46 +00:00
|
|
|
copy_v2_v2(t->tsnap.snapPoint, loc);
|
|
|
|
|
t->tsnap.snapNodeBorder = node_border;
|
|
|
|
|
|
|
|
|
|
t->tsnap.status |= POINT_INIT;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
t->tsnap.status &= ~POINT_INIT;
|
|
|
|
|
}
|
|
|
|
|
}
|
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
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/********************** TARGET **************************/
|
|
|
|
|
|
2012-06-29 14:34:46 +00:00
|
|
|
static void TargetSnapOffset(TransInfo *t, TransData *td)
|
|
|
|
|
{
|
|
|
|
|
if (t->spacetype == SPACE_NODE && td != NULL) {
|
|
|
|
|
bNode *node = td->extra;
|
|
|
|
|
char border = t->tsnap.snapNodeBorder;
|
2012-09-15 11:48:20 +00:00
|
|
|
float width = BLI_rctf_size_x(&node->totr);
|
|
|
|
|
float height = BLI_rctf_size_y(&node->totr);
|
2012-06-29 14:34:46 +00:00
|
|
|
|
2014-01-21 13:13:41 +01:00
|
|
|
#ifdef USE_NODE_CENTER
|
2012-06-29 14:34:46 +00:00
|
|
|
if (border & NODE_LEFT)
|
|
|
|
|
t->tsnap.snapTarget[0] -= 0.5f * width;
|
|
|
|
|
if (border & NODE_RIGHT)
|
|
|
|
|
t->tsnap.snapTarget[0] += 0.5f * width;
|
|
|
|
|
if (border & NODE_BOTTOM)
|
|
|
|
|
t->tsnap.snapTarget[1] -= 0.5f * height;
|
|
|
|
|
if (border & NODE_TOP)
|
|
|
|
|
t->tsnap.snapTarget[1] += 0.5f * height;
|
2014-01-21 13:13:41 +01:00
|
|
|
#else
|
|
|
|
|
if (border & NODE_LEFT)
|
|
|
|
|
t->tsnap.snapTarget[0] -= 0.0f;
|
|
|
|
|
if (border & NODE_RIGHT)
|
|
|
|
|
t->tsnap.snapTarget[0] += width;
|
|
|
|
|
if (border & NODE_BOTTOM)
|
|
|
|
|
t->tsnap.snapTarget[1] -= height;
|
|
|
|
|
if (border & NODE_TOP)
|
|
|
|
|
t->tsnap.snapTarget[1] += 0.0f;
|
|
|
|
|
#endif
|
2012-06-29 14:34:46 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2011-11-15 16:38:48 +00:00
|
|
|
static void TargetSnapCenter(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
|
|
|
{
|
2012-04-28 06:31:57 +00:00
|
|
|
/* Only need to calculate once */
|
|
|
|
|
if ((t->tsnap.status & TARGET_INIT) == 0) {
|
2015-06-26 16:19:39 +10:00
|
|
|
copy_v3_v3(t->tsnap.snapTarget, t->center_global);
|
2012-06-29 14:34:46 +00:00
|
|
|
TargetSnapOffset(t, NULL);
|
|
|
|
|
|
2012-10-21 05:46:41 +00:00
|
|
|
t->tsnap.status |= TARGET_INIT;
|
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
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2011-11-15 16:38:48 +00:00
|
|
|
static void TargetSnapActive(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
|
|
|
{
|
2012-04-28 06:31:57 +00:00
|
|
|
/* Only need to calculate once */
|
|
|
|
|
if ((t->tsnap.status & TARGET_INIT) == 0) {
|
2014-05-09 16:52:09 +10:00
|
|
|
if (calculateCenterActive(t, true, t->tsnap.snapTarget)) {
|
2012-06-10 22:13:17 +00:00
|
|
|
if (t->flag & (T_EDIT | T_POSE)) {
|
|
|
|
|
Object *ob = t->obedit ? t->obedit : t->poseobj;
|
2009-11-10 20:43:45 +00:00
|
|
|
mul_m4_v3(ob->obmat, t->tsnap.snapTarget);
|
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-05-09 16:52:09 +10:00
|
|
|
|
|
|
|
|
TargetSnapOffset(t, NULL);
|
|
|
|
|
|
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
|
|
|
t->tsnap.status |= TARGET_INIT;
|
|
|
|
|
}
|
|
|
|
|
/* No active, default to median */
|
2012-03-06 18:40:15 +00:00
|
|
|
else {
|
2009-12-03 19:18:00 +00:00
|
|
|
t->tsnap.target = SCE_SNAP_TARGET_MEDIAN;
|
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
|
|
|
t->tsnap.targetSnap = TargetSnapMedian;
|
|
|
|
|
TargetSnapMedian(t);
|
2012-10-21 05:46:41 +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
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2011-11-15 16:38:48 +00:00
|
|
|
static void TargetSnapMedian(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
|
|
|
{
|
|
|
|
|
// Only need to calculate once
|
2012-04-28 06:31:57 +00:00
|
|
|
if ((t->tsnap.status & TARGET_INIT) == 0) {
|
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 *td = NULL;
|
|
|
|
|
int i;
|
|
|
|
|
|
|
|
|
|
t->tsnap.snapTarget[0] = 0;
|
|
|
|
|
t->tsnap.snapTarget[1] = 0;
|
|
|
|
|
t->tsnap.snapTarget[2] = 0;
|
|
|
|
|
|
2012-06-10 22:13:17 +00:00
|
|
|
for (td = t->data, i = 0; i < t->total && td->flag & TD_SELECTED; i++, td++) {
|
2010-04-21 12:27:48 +00:00
|
|
|
add_v3_v3(t->tsnap.snapTarget, td->center);
|
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-11-10 20:43:45 +00:00
|
|
|
mul_v3_fl(t->tsnap.snapTarget, 1.0 / 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
|
|
|
|
2012-06-10 22:13:17 +00:00
|
|
|
if (t->flag & (T_EDIT | T_POSE)) {
|
|
|
|
|
Object *ob = t->obedit ? t->obedit : t->poseobj;
|
2009-11-10 20:43:45 +00:00
|
|
|
mul_m4_v3(ob->obmat, t->tsnap.snapTarget);
|
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
|
|
|
}
|
|
|
|
|
|
2012-06-29 14:34:46 +00:00
|
|
|
TargetSnapOffset(t, NULL);
|
|
|
|
|
|
2012-10-21 05:46:41 +00:00
|
|
|
t->tsnap.status |= TARGET_INIT;
|
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
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2011-11-15 16:38:48 +00:00
|
|
|
static void TargetSnapClosest(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
|
|
|
{
|
|
|
|
|
// Only valid if a snap point has been selected
|
2012-04-28 06:31:57 +00:00
|
|
|
if (t->tsnap.status & POINT_INIT) {
|
2016-01-18 13:15:38 +11:00
|
|
|
float dist_closest = 0.0f;
|
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 *closest = NULL, *td = NULL;
|
|
|
|
|
|
|
|
|
|
/* Object mode */
|
2012-04-28 06:31:57 +00:00
|
|
|
if (t->flag & T_OBJECT) {
|
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
|
|
|
int i;
|
2012-06-10 22:13:17 +00:00
|
|
|
for (td = t->data, i = 0; i < t->total && td->flag & TD_SELECTED; i++, td++) {
|
2012-05-05 14:03:12 +00:00
|
|
|
struct BoundBox *bb = BKE_object_boundbox_get(td->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
|
|
|
|
|
|
|
|
/* use boundbox if possible */
|
2012-04-28 06:31:57 +00:00
|
|
|
if (bb) {
|
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
|
|
|
int j;
|
|
|
|
|
|
|
|
|
|
for (j = 0; j < 8; j++) {
|
|
|
|
|
float loc[3];
|
|
|
|
|
float dist;
|
|
|
|
|
|
2011-09-12 04:14:12 +00:00
|
|
|
copy_v3_v3(loc, bb->vec[j]);
|
2009-11-10 20:43:45 +00:00
|
|
|
mul_m4_v3(td->ext->obmat, loc);
|
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
|
|
|
|
|
|
|
|
dist = t->tsnap.distance(t, loc, t->tsnap.snapPoint);
|
2015-10-16 14:45:05 +11:00
|
|
|
|
|
|
|
|
if ((dist != TRANSFORM_DIST_INVALID) &&
|
2016-01-18 13:15:38 +11:00
|
|
|
(closest == NULL || fabsf(dist) < fabsf(dist_closest)))
|
2015-10-16 14:45:05 +11:00
|
|
|
{
|
2011-09-12 04:14:12 +00:00
|
|
|
copy_v3_v3(t->tsnap.snapTarget, loc);
|
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
|
|
|
closest = td;
|
2016-01-18 13:15:38 +11:00
|
|
|
dist_closest = dist;
|
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
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/* use element center otherwise */
|
2012-03-06 18:40:15 +00:00
|
|
|
else {
|
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 loc[3];
|
|
|
|
|
float dist;
|
|
|
|
|
|
2011-09-12 04:14:12 +00:00
|
|
|
copy_v3_v3(loc, td->center);
|
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
|
|
|
|
|
|
|
|
dist = t->tsnap.distance(t, loc, t->tsnap.snapPoint);
|
2015-10-16 14:45:05 +11:00
|
|
|
|
|
|
|
|
if ((dist != TRANSFORM_DIST_INVALID) &&
|
2016-01-18 13:15:38 +11:00
|
|
|
(closest == NULL || fabsf(dist) < fabsf(dist_closest)))
|
2015-10-16 14:45:05 +11:00
|
|
|
{
|
2011-09-12 04:14:12 +00:00
|
|
|
copy_v3_v3(t->tsnap.snapTarget, loc);
|
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
|
|
|
closest = td;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2012-03-06 18:40:15 +00:00
|
|
|
else {
|
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
|
|
|
int i;
|
2012-06-10 22:13:17 +00:00
|
|
|
for (td = t->data, i = 0; i < t->total && td->flag & TD_SELECTED; i++, td++) {
|
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 loc[3];
|
|
|
|
|
float dist;
|
|
|
|
|
|
2011-09-12 04:14:12 +00:00
|
|
|
copy_v3_v3(loc, td->center);
|
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
|
|
|
|
2012-06-10 22:13:17 +00:00
|
|
|
if (t->flag & (T_EDIT | T_POSE)) {
|
|
|
|
|
Object *ob = t->obedit ? t->obedit : t->poseobj;
|
2009-11-10 20:43:45 +00:00
|
|
|
mul_m4_v3(ob->obmat, loc);
|
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
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dist = t->tsnap.distance(t, loc, t->tsnap.snapPoint);
|
|
|
|
|
|
2015-10-16 14:45:05 +11:00
|
|
|
if ((dist != TRANSFORM_DIST_INVALID) &&
|
2016-01-18 13:15:38 +11:00
|
|
|
(closest == NULL || fabsf(dist) < fabsf(dist_closest)))
|
2015-10-16 14:45:05 +11:00
|
|
|
{
|
2011-09-12 04:14:12 +00:00
|
|
|
copy_v3_v3(t->tsnap.snapTarget, loc);
|
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
|
|
|
closest = td;
|
2016-01-18 13:15:38 +11:00
|
|
|
dist_closest = dist;
|
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
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2012-06-29 14:34:46 +00:00
|
|
|
TargetSnapOffset(t, closest);
|
|
|
|
|
|
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
|
|
|
t->tsnap.status |= TARGET_INIT;
|
|
|
|
|
}
|
|
|
|
|
}
|
2009-02-24 21:25:36 +00:00
|
|
|
|
2015-12-02 18:08:48 +11:00
|
|
|
bool snapObjectsTransform(
|
2016-06-03 16:54:58 +10:00
|
|
|
TransInfo *t, const float mval[2],
|
2016-04-21 11:29:32 +10:00
|
|
|
float *dist_px,
|
|
|
|
|
float r_loc[3], float r_no[3])
|
2009-03-20 18:00:51 +00:00
|
|
|
{
|
2016-04-21 11:29:32 +10:00
|
|
|
return ED_transform_snap_object_project_view3d_ex(
|
|
|
|
|
t->tsnap.object_context,
|
2016-06-03 16:54:58 +10:00
|
|
|
t->scene->toolsettings->snap_mode,
|
2016-04-21 11:29:32 +10:00
|
|
|
&(const struct SnapObjectParams){
|
2017-01-30 18:30:19 -03:00
|
|
|
.snap_select = t->tsnap.modeSelect,
|
2016-06-03 16:54:58 +10:00
|
|
|
.use_object_edit_cage = (t->flag & T_EDIT) != 0,
|
2016-04-21 11:29:32 +10:00
|
|
|
},
|
2016-05-10 16:36:46 +10:00
|
|
|
mval, dist_px, NULL,
|
2016-04-21 11:29:32 +10:00
|
|
|
r_loc, r_no, NULL);
|
2013-04-03 09:48:21 +00:00
|
|
|
}
|
2009-03-20 18:00:51 +00:00
|
|
|
|
|
|
|
|
|
2009-02-24 00:45:40 +00:00
|
|
|
/******************** PEELING *********************************/
|
|
|
|
|
|
2016-05-11 19:59:02 +10:00
|
|
|
bool peelObjectsSnapContext(
|
|
|
|
|
SnapObjectContext *sctx,
|
2016-06-03 16:54:58 +10:00
|
|
|
const float mval[2],
|
|
|
|
|
const struct SnapObjectParams *params,
|
|
|
|
|
const bool use_peel_object,
|
2016-05-11 19:59:02 +10:00
|
|
|
/* return args */
|
|
|
|
|
float r_loc[3], float r_no[3], float *r_thickness)
|
2009-02-24 00:45:40 +00:00
|
|
|
{
|
2016-05-11 19:59:02 +10:00
|
|
|
ListBase depths_peel = {0};
|
|
|
|
|
ED_transform_snap_object_project_all_view3d_ex(
|
|
|
|
|
sctx,
|
2016-06-03 16:54:58 +10:00
|
|
|
params,
|
2016-05-11 19:59:02 +10:00
|
|
|
mval, -1.0f, false,
|
|
|
|
|
&depths_peel);
|
|
|
|
|
|
|
|
|
|
if (!BLI_listbase_is_empty(&depths_peel)) {
|
|
|
|
|
/* At the moment we only use the hits of the first object */
|
|
|
|
|
struct SnapObjectHitDepth *hit_min = depths_peel.first;
|
|
|
|
|
for (struct SnapObjectHitDepth *iter = hit_min->next; iter; iter = iter->next) {
|
|
|
|
|
if (iter->depth < hit_min->depth) {
|
|
|
|
|
hit_min = iter;
|
2009-02-24 00:45:40 +00:00
|
|
|
}
|
|
|
|
|
}
|
2016-05-11 19:59:02 +10:00
|
|
|
struct SnapObjectHitDepth *hit_max = NULL;
|
|
|
|
|
|
|
|
|
|
if (use_peel_object) {
|
|
|
|
|
/* if peeling objects, take the first and last from each object */
|
|
|
|
|
hit_max = hit_min;
|
|
|
|
|
for (struct SnapObjectHitDepth *iter = depths_peel.first; iter; iter = iter->next) {
|
|
|
|
|
if ((iter->depth > hit_max->depth) && (iter->ob_uuid == hit_min->ob_uuid)) {
|
|
|
|
|
hit_max = iter;
|
|
|
|
|
}
|
2015-09-14 12:51:04 +02:00
|
|
|
}
|
2009-02-24 00:45:40 +00:00
|
|
|
}
|
2016-05-11 19:59:02 +10:00
|
|
|
else {
|
|
|
|
|
/* otherwise, pair first with second and so on */
|
|
|
|
|
for (struct SnapObjectHitDepth *iter = depths_peel.first; iter; iter = iter->next) {
|
|
|
|
|
if ((iter != hit_min) && (iter->ob_uuid == hit_min->ob_uuid)) {
|
|
|
|
|
if (hit_max == NULL) {
|
|
|
|
|
hit_max = iter;
|
|
|
|
|
}
|
|
|
|
|
else if (iter->depth < hit_max->depth) {
|
|
|
|
|
hit_max = iter;
|
|
|
|
|
}
|
|
|
|
|
}
|
2009-02-24 00:45:40 +00:00
|
|
|
}
|
2016-05-11 19:59:02 +10:00
|
|
|
/* in this case has only one hit. treat as raycast */
|
|
|
|
|
if (hit_max == NULL) {
|
|
|
|
|
hit_max = hit_min;
|
2016-05-06 04:49:21 +10:00
|
|
|
}
|
|
|
|
|
}
|
2009-02-24 00:45:40 +00:00
|
|
|
|
2016-05-11 19:59:02 +10:00
|
|
|
mid_v3_v3v3(r_loc, hit_min->co, hit_max->co);
|
2012-04-16 10:09:26 +00:00
|
|
|
|
2016-05-11 19:59:02 +10:00
|
|
|
if (r_thickness) {
|
|
|
|
|
*r_thickness = hit_max->depth - hit_min->depth;
|
|
|
|
|
}
|
2009-05-23 03:24:15 +00:00
|
|
|
|
2016-05-11 19:59:02 +10:00
|
|
|
/* XXX, is there a correct normal in this case ???, for now just z up */
|
|
|
|
|
r_no[0] = 0.0;
|
|
|
|
|
r_no[1] = 0.0;
|
|
|
|
|
r_no[2] = 1.0;
|
2016-05-06 04:49:21 +10:00
|
|
|
|
2016-05-11 19:59:02 +10:00
|
|
|
BLI_freelistN(&depths_peel);
|
|
|
|
|
return true;
|
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-11 19:59:02 +10:00
|
|
|
return false;
|
2009-03-20 18:00:51 +00:00
|
|
|
}
|
|
|
|
|
|
2016-05-11 19:59:02 +10:00
|
|
|
bool peelObjectsTransform(
|
|
|
|
|
TransInfo *t,
|
2016-06-03 16:54:58 +10:00
|
|
|
const float mval[2],
|
|
|
|
|
const bool use_peel_object,
|
2016-05-11 19:59:02 +10:00
|
|
|
/* return args */
|
|
|
|
|
float r_loc[3], float r_no[3], float *r_thickness)
|
2009-03-20 18:00:51 +00:00
|
|
|
{
|
2016-05-11 19:59:02 +10:00
|
|
|
return peelObjectsSnapContext(
|
|
|
|
|
t->tsnap.object_context,
|
2016-06-03 16:54:58 +10:00
|
|
|
mval,
|
|
|
|
|
&(const struct SnapObjectParams){
|
2017-01-30 18:30:19 -03:00
|
|
|
.snap_select = t->tsnap.modeSelect,
|
2016-06-03 16:54:58 +10:00
|
|
|
.use_object_edit_cage = (t->flag & T_EDIT) != 0,
|
|
|
|
|
},
|
|
|
|
|
use_peel_object,
|
2016-05-11 19:59:02 +10:00
|
|
|
r_loc, r_no, r_thickness);
|
2009-03-20 18:00:51 +00:00
|
|
|
}
|
|
|
|
|
|
2012-06-29 14:34:46 +00:00
|
|
|
/******************** NODES ***********************************/
|
|
|
|
|
|
2015-12-02 18:08:48 +11:00
|
|
|
static bool snapNodeTest(View2D *v2d, bNode *node, SnapSelect snap_select)
|
2012-06-29 14:34:46 +00:00
|
|
|
{
|
|
|
|
|
/* node is use for snapping only if a) snap mode matches and b) node is inside the view */
|
2015-12-02 18:08:48 +11:00
|
|
|
return ((snap_select == SNAP_NOT_SELECTED && !(node->flag & NODE_SELECT)) ||
|
|
|
|
|
(snap_select == SNAP_ALL && !(node->flag & NODE_ACTIVE))) &&
|
2012-06-29 14:34:46 +00:00
|
|
|
(node->totr.xmin < v2d->cur.xmax && node->totr.xmax > v2d->cur.xmin &&
|
|
|
|
|
node->totr.ymin < v2d->cur.ymax && node->totr.ymax > v2d->cur.ymin);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static NodeBorder snapNodeBorder(int snap_node_mode)
|
|
|
|
|
{
|
|
|
|
|
switch (snap_node_mode) {
|
|
|
|
|
case SCE_SNAP_MODE_NODE_X:
|
|
|
|
|
return NODE_LEFT | NODE_RIGHT;
|
|
|
|
|
case SCE_SNAP_MODE_NODE_Y:
|
|
|
|
|
return NODE_TOP | NODE_BOTTOM;
|
|
|
|
|
case SCE_SNAP_MODE_NODE_XY:
|
|
|
|
|
return NODE_LEFT | NODE_RIGHT | NODE_TOP | NODE_BOTTOM;
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2015-12-02 18:08:48 +11:00
|
|
|
static bool snapNode(
|
|
|
|
|
ToolSettings *ts, SpaceNode *UNUSED(snode), ARegion *ar, bNode *node, const int mval[2],
|
|
|
|
|
float r_loc[2], float *r_dist_px, char *r_node_border)
|
2012-06-29 14:34:46 +00:00
|
|
|
{
|
|
|
|
|
View2D *v2d = &ar->v2d;
|
|
|
|
|
NodeBorder border = snapNodeBorder(ts->snap_node_mode);
|
2013-03-08 18:28:26 +00:00
|
|
|
bool retval = false;
|
2012-06-29 14:34:46 +00:00
|
|
|
rcti totr;
|
|
|
|
|
int new_dist;
|
|
|
|
|
|
2014-04-21 16:47:16 +10:00
|
|
|
UI_view2d_view_to_region_rcti(v2d, &node->totr, &totr);
|
2012-06-29 14:34:46 +00:00
|
|
|
|
|
|
|
|
if (border & NODE_LEFT) {
|
|
|
|
|
new_dist = abs(totr.xmin - mval[0]);
|
2013-04-03 07:36:37 +00:00
|
|
|
if (new_dist < *r_dist_px) {
|
2012-06-29 14:34:46 +00:00
|
|
|
UI_view2d_region_to_view(v2d, totr.xmin, mval[1], &r_loc[0], &r_loc[1]);
|
2013-04-03 07:36:37 +00:00
|
|
|
*r_dist_px = new_dist;
|
2012-06-29 14:34:46 +00:00
|
|
|
*r_node_border = NODE_LEFT;
|
2013-03-08 18:28:26 +00:00
|
|
|
retval = true;
|
2012-06-29 14:34:46 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (border & NODE_RIGHT) {
|
|
|
|
|
new_dist = abs(totr.xmax - mval[0]);
|
2013-04-03 07:36:37 +00:00
|
|
|
if (new_dist < *r_dist_px) {
|
2012-06-29 14:34:46 +00:00
|
|
|
UI_view2d_region_to_view(v2d, totr.xmax, mval[1], &r_loc[0], &r_loc[1]);
|
2013-04-03 07:36:37 +00:00
|
|
|
*r_dist_px = new_dist;
|
2012-06-29 14:34:46 +00:00
|
|
|
*r_node_border = NODE_RIGHT;
|
2013-03-08 18:28:26 +00:00
|
|
|
retval = true;
|
2012-06-29 14:34:46 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (border & NODE_BOTTOM) {
|
|
|
|
|
new_dist = abs(totr.ymin - mval[1]);
|
2013-04-03 07:36:37 +00:00
|
|
|
if (new_dist < *r_dist_px) {
|
2012-06-29 14:34:46 +00:00
|
|
|
UI_view2d_region_to_view(v2d, mval[0], totr.ymin, &r_loc[0], &r_loc[1]);
|
2013-04-03 07:36:37 +00:00
|
|
|
*r_dist_px = new_dist;
|
2012-06-29 14:34:46 +00:00
|
|
|
*r_node_border = NODE_BOTTOM;
|
2013-03-08 18:28:26 +00:00
|
|
|
retval = true;
|
2012-06-29 14:34:46 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (border & NODE_TOP) {
|
|
|
|
|
new_dist = abs(totr.ymax - mval[1]);
|
2013-04-03 07:36:37 +00:00
|
|
|
if (new_dist < *r_dist_px) {
|
2012-06-29 14:34:46 +00:00
|
|
|
UI_view2d_region_to_view(v2d, mval[0], totr.ymax, &r_loc[0], &r_loc[1]);
|
2013-04-03 07:36:37 +00:00
|
|
|
*r_dist_px = new_dist;
|
2012-06-29 14:34:46 +00:00
|
|
|
*r_node_border = NODE_TOP;
|
2013-03-08 18:28:26 +00:00
|
|
|
retval = true;
|
2012-06-29 14:34:46 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return retval;
|
|
|
|
|
}
|
|
|
|
|
|
2015-12-02 18:08:48 +11:00
|
|
|
static bool snapNodes(
|
|
|
|
|
ToolSettings *ts, SpaceNode *snode, ARegion *ar,
|
|
|
|
|
const int mval[2], SnapSelect snap_select,
|
|
|
|
|
float r_loc[2], float *r_dist_px, char *r_node_border)
|
2012-06-29 14:34:46 +00:00
|
|
|
{
|
|
|
|
|
bNodeTree *ntree = snode->edittree;
|
|
|
|
|
bNode *node;
|
2013-03-08 18:28:26 +00:00
|
|
|
bool retval = false;
|
2012-06-29 14:34:46 +00:00
|
|
|
|
|
|
|
|
*r_node_border = 0;
|
|
|
|
|
|
|
|
|
|
for (node = ntree->nodes.first; node; node = node->next) {
|
2015-12-02 18:08:48 +11:00
|
|
|
if (snapNodeTest(&ar->v2d, node, snap_select)) {
|
2013-04-03 07:36:37 +00:00
|
|
|
retval |= snapNode(ts, snode, ar, node, mval, r_loc, r_dist_px, r_node_border);
|
2015-12-02 18:08:48 +11:00
|
|
|
}
|
2012-06-29 14:34:46 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return retval;
|
|
|
|
|
}
|
|
|
|
|
|
2015-12-02 18:08:48 +11:00
|
|
|
bool snapNodesTransform(
|
|
|
|
|
TransInfo *t, const int mval[2], SnapSelect snap_select,
|
|
|
|
|
float r_loc[2], float *r_dist_px, char *r_node_border)
|
2012-06-29 14:34:46 +00:00
|
|
|
{
|
2015-12-02 18:08:48 +11:00
|
|
|
return snapNodes(
|
|
|
|
|
t->settings, t->sa->spacedata.first, t->ar, mval, snap_select,
|
|
|
|
|
r_loc, r_dist_px, r_node_border);
|
2012-06-29 14:34:46 +00:00
|
|
|
}
|
|
|
|
|
|
2015-12-02 18:08:48 +11:00
|
|
|
bool snapNodesContext(
|
|
|
|
|
bContext *C, const int mval[2], SnapSelect snap_select,
|
|
|
|
|
float r_loc[2], float *r_dist_px, char *r_node_border)
|
2012-06-29 14:34:46 +00:00
|
|
|
{
|
|
|
|
|
Scene *scene = CTX_data_scene(C);
|
2013-04-24 17:49:13 +00:00
|
|
|
ARegion *ar = CTX_wm_region(C);
|
2015-12-02 18:08:48 +11:00
|
|
|
return snapNodes(
|
|
|
|
|
scene->toolsettings, CTX_wm_space_node(C), ar, mval, snap_select,
|
|
|
|
|
r_loc, r_dist_px, r_node_border);
|
2012-06-29 14:34:46 +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
|
|
|
/*================================================================*/
|
|
|
|
|
|
2014-10-10 00:23:06 +02:00
|
|
|
static void applyGridIncrement(TransInfo *t, float *val, int max_index, const float fac[3], 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
|
|
|
|
|
|
|
|
|
2013-11-06 17:46:32 +00:00
|
|
|
void snapGridIncrementAction(TransInfo *t, float *val, GearsType action)
|
2011-09-28 05:53:40 +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
|
|
|
float fac[3];
|
|
|
|
|
|
|
|
|
|
fac[NO_GEARS] = t->snap[0];
|
|
|
|
|
fac[BIG_GEARS] = t->snap[1];
|
|
|
|
|
fac[SMALL_GEARS] = t->snap[2];
|
|
|
|
|
|
2013-11-06 17:46:32 +00:00
|
|
|
applyGridIncrement(t, val, t->idx_max, fac, 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
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2013-11-06 17:46:32 +00:00
|
|
|
void snapGridIncrement(TransInfo *t, float *val)
|
2011-09-28 05:53:40 +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
|
|
|
GearsType action;
|
|
|
|
|
|
2015-06-27 15:30:17 +10:00
|
|
|
/* only do something if using absolute or incremental grid snapping */
|
|
|
|
|
if (!ELEM(t->tsnap.mode, SCE_SNAP_MODE_INCREMENT, SCE_SNAP_MODE_GRID))
|
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
|
|
|
return;
|
|
|
|
|
|
2010-07-12 11:17:42 +00:00
|
|
|
action = activeSnap(t) ? BIG_GEARS : NO_GEARS;
|
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-03 22:15:59 +00:00
|
|
|
if (action == BIG_GEARS && (t->modifiers & MOD_PRECISION)) {
|
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
|
|
|
action = SMALL_GEARS;
|
|
|
|
|
}
|
|
|
|
|
|
2013-11-06 17:46:32 +00:00
|
|
|
snapGridIncrementAction(t, val, 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
|
|
|
{
|
|
|
|
|
float xmouse, ymouse;
|
|
|
|
|
int frame;
|
|
|
|
|
int mframe;
|
2016-02-01 15:15:10 +11:00
|
|
|
TransSeq *ts = t->custom.type.data;
|
2014-11-24 18:18:35 +01:00
|
|
|
/* reuse increment, strictly speaking could be another snap mode, but leave as is */
|
|
|
|
|
if (!(t->modifiers & MOD_SNAP_INVERT))
|
2015-03-19 20:47:38 +01:00
|
|
|
return;
|
2014-11-24 18:18:35 +01:00
|
|
|
|
|
|
|
|
/* convert to frame range */
|
|
|
|
|
UI_view2d_region_to_view(&t->ar->v2d, mval[0], mval[1], &xmouse, &ymouse);
|
|
|
|
|
mframe = iroundf(xmouse);
|
|
|
|
|
/* now find the closest sequence */
|
|
|
|
|
frame = BKE_sequencer_find_next_prev_edit(t->scene, mframe, SEQ_SIDE_BOTH, true, false, true);
|
|
|
|
|
|
|
|
|
|
if (!ts->snap_left)
|
|
|
|
|
frame = frame - (ts->max - ts->min);
|
|
|
|
|
|
2015-03-19 20:47:38 +01:00
|
|
|
t->values[0] = frame - ts->min;
|
2014-11-24 18:18:35 +01: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
|
|
|
|
2014-10-10 00:23:06 +02:00
|
|
|
static void applyGridIncrement(TransInfo *t, float *val, int max_index, const float fac[3], 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-06-26 15:45:09 +10:00
|
|
|
float asp_local[3] = {1, 1, 1};
|
|
|
|
|
const bool use_aspect = ELEM(t->mode, TFM_TRANSLATION);
|
|
|
|
|
const float *asp = use_aspect ? t->aspect : asp_local;
|
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
|
|
|
int i;
|
|
|
|
|
|
2015-06-27 15:30:17 +10:00
|
|
|
BLI_assert(ELEM(t->tsnap.mode, SCE_SNAP_MODE_INCREMENT, SCE_SNAP_MODE_GRID));
|
2015-06-26 15:45:09 +10:00
|
|
|
BLI_assert(max_index <= 2);
|
2011-07-26 13:33:04 +00:00
|
|
|
|
2015-06-26 15:45:09 +10:00
|
|
|
/* Early bailing out if no need to snap */
|
|
|
|
|
if (fac[action] == 0.0f) {
|
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
|
|
|
return;
|
|
|
|
|
}
|
2014-11-20 17:44:47 +01:00
|
|
|
|
2015-06-26 15:45:09 +10:00
|
|
|
if (use_aspect) {
|
|
|
|
|
/* custom aspect for fcurve */
|
|
|
|
|
if (t->spacetype == SPACE_IPO) {
|
|
|
|
|
View2D *v2d = &t->ar->v2d;
|
|
|
|
|
View2DGrid *grid;
|
|
|
|
|
SpaceIpo *sipo = t->sa->spacedata.first;
|
|
|
|
|
int unity = V2D_UNIT_VALUES;
|
|
|
|
|
int unitx = (sipo->flag & SIPO_DRAWTIME) ? V2D_UNIT_SECONDS : V2D_UNIT_FRAMESCALE;
|
|
|
|
|
|
|
|
|
|
/* grid */
|
|
|
|
|
grid = UI_view2d_grid_calc(t->scene, v2d, unitx, V2D_GRID_NOCLAMP, unity, V2D_GRID_NOCLAMP, t->ar->winx, t->ar->winy);
|
2014-11-20 17:44:47 +01:00
|
|
|
|
2015-06-26 15:45:09 +10:00
|
|
|
UI_view2d_grid_size(grid, &asp_local[0], &asp_local[1]);
|
|
|
|
|
UI_view2d_grid_free(grid);
|
|
|
|
|
|
|
|
|
|
asp = asp_local;
|
|
|
|
|
}
|
2014-11-20 17:44:47 +01: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
|
|
|
|
2015-06-27 15:30:17 +10:00
|
|
|
/* absolute snapping on grid based on global center */
|
2015-07-02 02:13:15 +10:00
|
|
|
if ((t->tsnap.snap_spatial_grid) && (t->mode == TFM_TRANSLATION)) {
|
2016-05-31 23:56:59 +10:00
|
|
|
const float *center_global = t->center_global;
|
|
|
|
|
|
|
|
|
|
/* use a fallback for cursor selection,
|
|
|
|
|
* this isn't useful as a global center for absolute grid snapping
|
|
|
|
|
* since its not based on the position of the selection. */
|
|
|
|
|
if (t->around == V3D_AROUND_CURSOR) {
|
|
|
|
|
const TransCenterData *cd = transformCenter_from_type(t, V3D_AROUND_CENTER_MEAN);
|
|
|
|
|
center_global = cd->global;
|
|
|
|
|
}
|
|
|
|
|
|
2015-06-27 15:30:17 +10:00
|
|
|
for (i = 0; i <= max_index; i++) {
|
|
|
|
|
/* do not let unconstrained axis jump to absolute grid increments */
|
|
|
|
|
if (!(t->con.mode & CON_APPLY) || t->con.mode & (CON_AXIS0 << i)) {
|
|
|
|
|
const float iter_fac = fac[action] * asp[i];
|
2016-05-31 23:56:59 +10:00
|
|
|
val[i] = iter_fac * roundf((val[i] + center_global[i]) / iter_fac) - center_global[i];
|
2015-06-27 15:30:17 +10:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
/* relative snapping in fixed increments */
|
|
|
|
|
for (i = 0; i <= max_index; i++) {
|
|
|
|
|
const float iter_fac = fac[action] * asp[i];
|
|
|
|
|
val[i] = iter_fac * roundf(val[i] / iter_fac);
|
|
|
|
|
}
|
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
|
|
|
}
|
|
|
|
|
}
|