Blender V2.61 - r43446
Classes | Defines | Typedefs | Functions

editmesh_lib.c File Reference

#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "MEM_guardedalloc.h"
#include "DNA_meshdata_types.h"
#include "DNA_modifier_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
#include "BLI_editVert.h"
#include "BLI_edgehash.h"
#include "BLI_utildefines.h"
#include "BKE_customdata.h"
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_mesh.h"
#include "ED_mesh.h"
#include "ED_screen.h"
#include "ED_view3d.h"
#include "ED_transform.h"
#include "mesh_intern.h"

Go to the source code of this file.

Classes

struct  EdgeFaceRef

Defines

#define SET_EVE_FLAG(eve, flag)
#define SET_EED_FLAG(eed, flag)
#define NOCALC_EDGEWEIGHT_ADD_EDGEREF_FACE(EDV1, EDV2)

Typedefs

typedef struct EdgeFaceRef EdgeFaceRef

Functions

int EM_nfaces_selected (EditMesh *em)
int EM_nedges_selected (EditMesh *em)
int EM_nvertices_selected (EditMesh *em)
void EM_stats_update (EditMesh *em)
void EM_set_actFace (EditMesh *em, EditFace *efa)
EditFaceEM_get_actFace (EditMesh *em, int sloppy)
int EM_get_actSelection (EditMesh *em, EditSelection *ese)
static int EM_check_selection (EditMesh *em, void *data)
void EM_remove_selection (EditMesh *em, void *data, int UNUSED(type))
void EM_store_selection (EditMesh *em, void *data, int type)
void EM_validate_selections (EditMesh *em)
static void EM_strip_selections (EditMesh *em)
void EM_editselection_center (float *center, EditSelection *ese)
void EM_editselection_normal (float *normal, EditSelection *ese)
void EM_editselection_plane (float *plane, EditSelection *ese)
void EM_select_face (EditFace *efa, int sel)
void EM_select_edge (EditEdge *eed, int sel)
void EM_select_face_fgon (EditMesh *em, EditFace *efa, int val)
int faceselectedOR (EditFace *efa, int flag)
int faceselectedAND (EditFace *efa, int flag)
void EM_clear_flag_all (EditMesh *em, int flag)
void EM_set_flag_all (EditMesh *em, int flag)
void EM_set_flag_all_selectmode (EditMesh *em, int flag)
void EM_deselect_flush (EditMesh *em)
void EM_select_flush (EditMesh *em)
static void check_fgons_selection (EditMesh *em)
void EM_selectmode_flush (EditMesh *em)
void EM_convertsel (EditMesh *em, short oldmode, short selectmode)
void EM_selectmode_to_scene (struct Scene *scene, struct Object *obedit)
void EM_selectmode_set (EditMesh *em)
void EM_hide_reset (EditMesh *em)
void EM_data_interp_from_verts (EditMesh *em, EditVert *v1, EditVert *v2, EditVert *eve, float fac)
void EM_data_interp_from_faces (EditMesh *em, EditFace *efa1, EditFace *efa2, EditFace *efan, int i1, int i2, int i3, int i4)
EditFaceEM_face_from_faces (EditMesh *em, EditFace *efa1, EditFace *efa2, int i1, int i2, int i3, int i4)
static void update_data_blocks (EditMesh *em, CustomData *olddata, CustomData *data)
void EM_add_data_layer (EditMesh *em, CustomData *data, int type, const char *name)
void EM_free_data_layer (EditMesh *em, CustomData *data, int type)
static void add_normal_aligned (float *nor, float *add)
static void set_edge_directions_f2 (EditMesh *em, int val)
short extrudeflag_face_indiv (EditMesh *em, short UNUSED(flag), float *UNUSED(nor))
short extrudeflag_edges_indiv (EditMesh *em, short flag, float *nor)
short extrudeflag_verts_indiv (EditMesh *em, short flag, float *UNUSED(nor))
static short extrudeflag_edge (Object *obedit, EditMesh *em, short UNUSED(flag), float *nor, int all)
short extrudeflag_vert (Object *obedit, EditMesh *em, short flag, float *nor, int all)
short extrudeflag (Object *obedit, EditMesh *em, short flag, float *nor, int all)
void rotateflag (EditMesh *em, short flag, float *cent, float rotmat[][3])
void translateflag (EditMesh *em, short flag, float *vec)
static EditVertadduplicate_vertex (EditMesh *em, EditVert *eve, int flag)
void adduplicateflag (EditMesh *em, int flag)
void delfaceflag (EditMesh *em, int flag)
void recalc_editnormals (EditMesh *em)
int compareface (EditFace *vl1, EditFace *vl2)
EditFaceexist_face (EditMesh *em, EditVert *v1, EditVert *v2, EditVert *v3, EditVert *v4)
int convex (float *v1, float *v2, float *v3, float *v4)
float EM_face_area (EditFace *efa)
float EM_face_perimeter (EditFace *efa)
void EM_fgon_flags (EditMesh *em)
UvVertMapEM_make_uv_vert_map (EditMesh *em, int selected, int do_face_idx_array, float *limit)
UvMapVertEM_get_uv_map_vert (UvVertMap *vmap, unsigned int v)
void EM_free_uv_vert_map (UvVertMap *vmap)
int EM_view3d_poll (bContext *C)
void EM_make_hq_normals (EditMesh *em)
void EM_solidify (EditMesh *em, float dist)
static void tag_face_edges (EditFace *efa)
static int tag_face_edges_test (EditFace *efa)
static void em_deselect_nth_face (EditMesh *em, int nth, EditFace *efa_act)
static void tag_edge_verts (EditEdge *eed)
static int tag_edge_verts_test (EditEdge *eed)
static void em_deselect_nth_edge (EditMesh *em, int nth, EditEdge *eed_act)
static void em_deselect_nth_vert (EditMesh *em, int nth, EditVert *eve_act)
static void deselect_nth_active (EditMesh *em, EditVert **eve_p, EditEdge **eed_p, EditFace **efa_p)
int EM_deselect_nth (EditMesh *em, int nth)
void EM_project_snap_verts (bContext *C, ARegion *ar, Object *obedit, EditMesh *em)

Detailed Description

Definition in file editmesh_lib.c.


Define Documentation

#define NOCALC_EDGEWEIGHT_ADD_EDGEREF_FACE (   EDV1,
  EDV2 
)
Value:
; \
        { \
            const unsigned int mf_v1 = EDV1; \
            const unsigned int mf_v2 = EDV2; \
            edge_ref = (EdgeFaceRef *)BLI_edgehash_lookup(edge_hash, mf_v1, mf_v2); \
            if (!edge_ref) { \
                edge_ref = &edge_ref_array[edge_ref_count]; edge_ref_count++; \
                edge_ref->f1 = i; \
                edge_ref->f2 = -1; \
                BLI_edgehash_insert(edge_hash, mf_v1, mf_v2, edge_ref); \
            } \
            else { \
                edge_ref->f2 = i; \
            } \
        }

Referenced by dm_calc_normal(), and EM_make_hq_normals().

#define SET_EED_FLAG (   eed,
  flag 
)
Value:
if (eed->h==0) { \
        if (flag & SELECT && !(eed->f & SELECT)) { \
            ++seledge; \
        } \
        eed->f |= flag; \
        SET_EVE_FLAG(eed->v1, flag); \
        SET_EVE_FLAG(eed->v2, flag); \
    }

Definition at line 78 of file editmesh_lib.c.

Referenced by EM_set_flag_all_selectmode().

#define SET_EVE_FLAG (   eve,
  flag 
)
Value:
if (eve->h==0) { \
        if (flag & SELECT && !(eve->f & SELECT)) { \
            ++selvert; \
        } \
        eve->f |= flag; \
    }

Definition at line 70 of file editmesh_lib.c.


Typedef Documentation

typedef struct EdgeFaceRef EdgeFaceRef

Function Documentation

static void add_normal_aligned ( float *  nor,
float *  add 
) [static]
static EditVert* adduplicate_vertex ( EditMesh em,
EditVert eve,
int  flag 
) [static]

Definition at line 1835 of file editmesh_lib.c.

References addvertlist(), EditVert::co, EditVert::f, EditVert::tmp, and EditVert::v.

Referenced by adduplicateflag().

void adduplicateflag ( EditMesh em,
int  flag 
)
static void check_fgons_selection ( EditMesh em) [static]
int compareface ( EditFace vl1,
EditFace vl2 
)

Definition at line 2041 of file editmesh_lib.c.

References EditFace::v1, EditFace::v2, EditFace::v3, and EditFace::v4.

Referenced by exist_face(), and removedoublesflag().

int convex ( float *  v1,
float *  v2,
float *  v3,
float *  v4 
)

Definition at line 2097 of file editmesh_lib.c.

References ABS, isect_line_line_v2(), and normal_tri_v3().

Referenced by addedgeface_mesh(), beautify_fill(), draw_volume(), and edge_flip().

void delfaceflag ( EditMesh em,
int  flag 
)
static void deselect_nth_active ( EditMesh em,
EditVert **  eve_p,
EditEdge **  eed_p,
EditFace **  efa_p 
) [static]
void EM_add_data_layer ( EditMesh em,
CustomData data,
int  type,
const char *  name 
)
static int EM_check_selection ( EditMesh em,
void *  data 
) [static]
void EM_clear_flag_all ( EditMesh em,
int  flag 
)
void EM_convertsel ( EditMesh em,
short  oldmode,
short  selectmode 
)
void EM_data_interp_from_faces ( EditMesh em,
EditFace efa1,
EditFace efa2,
EditFace efan,
int  i1,
int  i2,
int  i3,
int  i4 
)
void EM_data_interp_from_verts ( EditMesh em,
EditVert v1,
EditVert v2,
EditVert eve,
float  fac 
)
void EM_deselect_flush ( EditMesh em)
int EM_deselect_nth ( EditMesh em,
int  nth 
)
static void em_deselect_nth_edge ( EditMesh em,
int  nth,
EditEdge eed_act 
) [static]
static void em_deselect_nth_face ( EditMesh em,
int  nth,
EditFace efa_act 
) [static]
static void em_deselect_nth_vert ( EditMesh em,
int  nth,
EditVert eve_act 
) [static]
void EM_editselection_center ( float *  center,
EditSelection ese 
)
void EM_editselection_normal ( float *  normal,
EditSelection ese 
)
void EM_editselection_plane ( float *  plane,
EditSelection ese 
)
float EM_face_area ( EditFace efa)
EditFace* EM_face_from_faces ( EditMesh em,
EditFace efa1,
EditFace efa2,
int  i1,
int  i2,
int  i3,
int  i4 
) [read]
float EM_face_perimeter ( EditFace efa)
void EM_fgon_flags ( EditMesh em)
void EM_free_data_layer ( EditMesh em,
CustomData data,
int  type 
)
void EM_free_uv_vert_map ( UvVertMap vmap)
EditFace* EM_get_actFace ( EditMesh em,
int  sloppy 
) [read]
int EM_get_actSelection ( EditMesh em,
EditSelection ese 
)
UvMapVert* EM_get_uv_map_vert ( UvVertMap vmap,
unsigned int  v 
) [read]

Definition at line 2372 of file editmesh_lib.c.

References EditVert::v, and UvVertMap::vert.

Referenced by select_linked(), stitch_exec(), uv_faces_do_sticky(), and uv_vertex_map_get().

void EM_hide_reset ( EditMesh em)
void EM_make_hq_normals ( EditMesh em)
UvVertMap* EM_make_uv_vert_map ( EditMesh em,
int  selected,
int  do_face_idx_array,
float *  limit 
) [read]
int EM_nedges_selected ( EditMesh em)
int EM_nfaces_selected ( EditMesh em)
int EM_nvertices_selected ( EditMesh em)
void EM_project_snap_verts ( bContext C,
ARegion ar,
Object obedit,
EditMesh em 
)
void EM_remove_selection ( EditMesh em,
void *  data,
int   UNUSEDtype 
)
void EM_select_edge ( EditEdge eed,
int  sel 
)
void EM_select_face ( EditFace efa,
int  sel 
)
void EM_select_face_fgon ( EditMesh em,
EditFace efa,
int  val 
)
void EM_select_flush ( EditMesh em)
void EM_selectmode_flush ( EditMesh em)
void EM_selectmode_set ( EditMesh em)
void EM_selectmode_to_scene ( struct Scene scene,
struct Object obedit 
)
void EM_set_actFace ( EditMesh em,
EditFace efa 
)
void EM_set_flag_all ( EditMesh em,
int  flag 
)
void EM_set_flag_all_selectmode ( EditMesh em,
int  flag 
)
void EM_solidify ( EditMesh em,
float  dist 
)
void EM_stats_update ( EditMesh em)
void EM_store_selection ( EditMesh em,
void *  data,
int  type 
)
static void EM_strip_selections ( EditMesh em) [static]
void EM_validate_selections ( EditMesh em)
int EM_view3d_poll ( bContext C)
EditFace* exist_face ( EditMesh em,
EditVert v1,
EditVert v2,
EditVert v3,
EditVert v4 
)
short extrudeflag ( Object obedit,
EditMesh em,
short  flag,
float *  nor,
int  all 
)
static short extrudeflag_edge ( Object obedit,
EditMesh em,
short   UNUSEDflag,
float *  nor,
int  all 
) [static]
short extrudeflag_edges_indiv ( EditMesh em,
short  flag,
float *  nor 
)
short extrudeflag_face_indiv ( EditMesh em,
short   UNUSEDflag,
float *  UNUSEDnor 
)
short extrudeflag_vert ( Object obedit,
EditMesh em,
short  flag,
float *  nor,
int  all 
)
short extrudeflag_verts_indiv ( EditMesh em,
short  flag,
float *  UNUSEDnor 
)
int faceselectedAND ( EditFace efa,
int  flag 
)

Definition at line 484 of file editmesh_lib.c.

References EditVert::f, EditFace::v1, EditFace::v2, EditFace::v3, and EditFace::v4.

Referenced by extrudeflag_vert(), and fill_mesh().

int faceselectedOR ( EditFace efa,
int  flag 
)
void recalc_editnormals ( EditMesh em)
void rotateflag ( EditMesh em,
short  flag,
float *  cent,
float  rotmat[][3] 
)
static void set_edge_directions_f2 ( EditMesh em,
int  val 
) [static]
static void tag_edge_verts ( EditEdge eed) [static]

Definition at line 2635 of file editmesh_lib.c.

References EditVert::l, EditVert::tmp, EditEdge::v1, and EditEdge::v2.

Referenced by em_deselect_nth_edge().

static int tag_edge_verts_test ( EditEdge eed) [static]

Definition at line 2639 of file editmesh_lib.c.

References EditVert::l, EditVert::tmp, EditEdge::v1, and EditEdge::v2.

Referenced by em_deselect_nth_edge().

static void tag_face_edges ( EditFace efa) [static]
static int tag_face_edges_test ( EditFace efa) [static]
void translateflag ( EditMesh em,
short  flag,
float *  vec 
)
static void update_data_blocks ( EditMesh em,
CustomData olddata,
CustomData data 
) [static]