forked from bartvdbraak/blender
c192b80b17
worked properly with modifiers. Needs more testing I am sure. No, honestly, I wasn't just cleaning for the hell of it, it was *necessary* (I would never do such a thing). Selection should work completely with cage options of modifiers now. - added DerivedMesh foreach functions to iterate over mapped verts/edges/face centers. These replaced some of the drawing functions and are more general anyway. Special edge drawing functions remain for performance reasons. - removed EditFace xs, ys fields - added general functions to iterate over screen coordinates of mesh/curve/lattice objects - removed all calc_*verts* functions that were used for storing screen coordinates in objects. they were recalc'd on the fly for most situations anyway, so now we just always do that. calc_*verts_ext was one of those calls that did dirty things deep down in the callstack (changing curarea and poking at matrices) - rewrote all vertex level selection routines (circle, lasso, bbox) and closest vertex routines (rightmouse select) to use the new system. This cleaned up the selection code a lot and the structure of selection is much easier to see now. This is good for future work on allowing modifiers to completely override the selection system. It also points out some discrepancies in the way selection is handled that might be nice to resolve (mesh vertex selection has fancy stuff to try to help with selecting overlapping, but it only works w/o bbuf select, and curves/lattices don't have at all). - had to remove ton's code to move Manipulator to cage location, this is not reliable (can come up with a different method if requested) - as it happens BezTriple.s and BPoint.s are basically available to be removed, just need to rewrite editipo code that still does background calc of screen coordinates - MVert.{xs,ys} are still around because they are abused in some places for other info (not sure if this is safe actually, since they are short's and the mvert limit went up). And did I mention this commit is comes out to -305 lines? Well it does.
110 lines
3.1 KiB
C
110 lines
3.1 KiB
C
/**
|
|
* blenlib/BLI_editVert.h mar 2001 Nzc
|
|
*
|
|
* Some editing types needed in the lib (unfortunately) for
|
|
* scanfill.c
|
|
*
|
|
* $Id$
|
|
*
|
|
* ***** BEGIN GPL/BL DUAL 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. The Blender
|
|
* Foundation also sells licenses for use in proprietary software under
|
|
* the Blender License. See http://www.blender.org/BL/ for information
|
|
* about this.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
*
|
|
* 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): none yet.
|
|
*
|
|
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
|
*/
|
|
|
|
#ifndef BLI_EDITVERT_H
|
|
#define BLI_EDITVERT_H
|
|
|
|
struct DerivedMesh;
|
|
|
|
/* note; changing this also might affect the undo copy in editmesh.c */
|
|
typedef struct EditVert
|
|
{
|
|
struct EditVert *next, *prev, *vn;
|
|
float no[3];
|
|
float co[3];
|
|
short xs, ys;
|
|
unsigned char f, h, f1, f2;
|
|
short fast; /* only 0 or 1, for editmesh_fastmalloc */
|
|
short totweight; /* __NLA */
|
|
int hash;
|
|
struct MDeformWeight *dw; /* __NLA */
|
|
int keyindex; /* original index #, for restoring key information */
|
|
} EditVert;
|
|
|
|
struct EditEdge;
|
|
|
|
typedef struct HashEdge {
|
|
struct EditEdge *eed;
|
|
struct HashEdge *next;
|
|
} HashEdge;
|
|
|
|
/* note; changing this also might affect the undo copy in editmesh.c */
|
|
typedef struct EditEdge
|
|
{
|
|
struct EditEdge *next, *prev;
|
|
struct EditVert *v1, *v2, *vn;
|
|
short f1, f2; /* short, f1 is (ab)used in subdiv */
|
|
unsigned char f, h, dir, seam;
|
|
float crease;
|
|
short fast; /* only 0 or 1, for editmesh_fastmalloc */
|
|
short fgoni; /* index for fgon, for search */
|
|
HashEdge hash;
|
|
} EditEdge;
|
|
|
|
/* note; changing this also might affect the undo copy in editmesh.c */
|
|
typedef struct EditFace
|
|
{
|
|
struct EditFace *next, *prev;
|
|
struct EditVert *v1, *v2, *v3, *v4;
|
|
struct EditEdge *e1, *e2, *e3, *e4;
|
|
float n[3], cent[3];
|
|
struct TFace tf; /* a copy of original tface. */
|
|
unsigned char mat_nr, flag;
|
|
unsigned char f, f1, h;
|
|
unsigned char fast; /* only 0 or 1, for editmesh_fastmalloc */
|
|
unsigned char fgonf; /* flag for fgon options */
|
|
} EditFace;
|
|
|
|
typedef struct EditMesh
|
|
{
|
|
ListBase verts, edges, faces;
|
|
HashEdge *hashedgetab;
|
|
|
|
/* this is for the editmesh_fastmalloc */
|
|
EditVert *allverts, *curvert;
|
|
EditEdge *alledges, *curedge;
|
|
EditFace *allfaces, *curface;
|
|
|
|
/* DerivedMesh caches... note that derived cage can be equivalent
|
|
* to derived final, care should be taken on release.
|
|
*/
|
|
struct DerivedMesh *derivedCage, *derivedFinal;
|
|
} EditMesh;
|
|
|
|
#endif
|
|
|