UV Edit: move uv vertex buttons code to uvedit module.
This commit is contained in:
@@ -32,12 +32,13 @@
|
|||||||
#ifndef ED_UVEDIT_H
|
#ifndef ED_UVEDIT_H
|
||||||
#define ED_UVEDIT_H
|
#define ED_UVEDIT_H
|
||||||
|
|
||||||
struct bContext;
|
struct ARegionType;
|
||||||
struct Scene;
|
|
||||||
struct Object;
|
|
||||||
struct MTFace;
|
|
||||||
struct EditFace;
|
struct EditFace;
|
||||||
struct Image;
|
struct Image;
|
||||||
|
struct MTFace;
|
||||||
|
struct Object;
|
||||||
|
struct Scene;
|
||||||
|
struct bContext;
|
||||||
struct wmKeyConfig;
|
struct wmKeyConfig;
|
||||||
|
|
||||||
/* uvedit_ops.c */
|
/* uvedit_ops.c */
|
||||||
@@ -77,5 +78,8 @@ void ED_unwrap_lscm(struct Scene *scene, struct Object *obedit, const short sel)
|
|||||||
/* uvedit_draw.c */
|
/* uvedit_draw.c */
|
||||||
void draw_uvedit_main(struct SpaceImage *sima, struct ARegion *ar, struct Scene *scene, struct Object *obedit);
|
void draw_uvedit_main(struct SpaceImage *sima, struct ARegion *ar, struct Scene *scene, struct Object *obedit);
|
||||||
|
|
||||||
|
/* uvedit_buttons.c */
|
||||||
|
void ED_uvedit_buttons_register(struct ARegionType *art);
|
||||||
|
|
||||||
#endif /* ED_UVEDIT_H */
|
#endif /* ED_UVEDIT_H */
|
||||||
|
|
||||||
|
@@ -63,8 +63,6 @@
|
|||||||
#include "ED_gpencil.h"
|
#include "ED_gpencil.h"
|
||||||
#include "ED_image.h"
|
#include "ED_image.h"
|
||||||
#include "ED_screen.h"
|
#include "ED_screen.h"
|
||||||
#include "ED_uvedit.h"
|
|
||||||
|
|
||||||
|
|
||||||
#include "RNA_access.h"
|
#include "RNA_access.h"
|
||||||
|
|
||||||
@@ -78,7 +76,6 @@
|
|||||||
|
|
||||||
#define B_REDR 1
|
#define B_REDR 1
|
||||||
#define B_IMAGECHANGED 2
|
#define B_IMAGECHANGED 2
|
||||||
#define B_TRANS_IMAGE 3
|
|
||||||
#define B_NOP 0
|
#define B_NOP 0
|
||||||
#define B_TWINANIM 5
|
#define B_TWINANIM 5
|
||||||
#define B_SIMAGETILE 6
|
#define B_SIMAGETILE 6
|
||||||
@@ -100,8 +97,6 @@
|
|||||||
#define B_SIMACLONEDELETE 26
|
#define B_SIMACLONEDELETE 26
|
||||||
|
|
||||||
/* proto */
|
/* proto */
|
||||||
static void image_editvertex_buts(const bContext *C, uiBlock *block);
|
|
||||||
|
|
||||||
|
|
||||||
static void do_image_panel_events(bContext *C, void *UNUSED(arg), int event)
|
static void do_image_panel_events(bContext *C, void *UNUSED(arg), int event)
|
||||||
{
|
{
|
||||||
@@ -110,9 +105,6 @@ static void do_image_panel_events(bContext *C, void *UNUSED(arg), int event)
|
|||||||
switch(event) {
|
switch(event) {
|
||||||
case B_REDR:
|
case B_REDR:
|
||||||
break;
|
break;
|
||||||
case B_TRANS_IMAGE:
|
|
||||||
image_editvertex_buts(C, NULL);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* all events now */
|
/* all events now */
|
||||||
@@ -193,127 +185,6 @@ struct ImageUser *ntree_get_active_iuser(bNodeTree *ntree)
|
|||||||
|
|
||||||
/* ************ panel stuff ************* */
|
/* ************ panel stuff ************* */
|
||||||
|
|
||||||
/* this function gets the values for cursor and vertex number buttons */
|
|
||||||
static void image_transform_but_attr(SpaceImage *sima, int *imx, int *imy, int *step, int *digits) /*, float *xcoord, float *ycoord)*/
|
|
||||||
{
|
|
||||||
ED_space_image_size(sima, imx, imy);
|
|
||||||
|
|
||||||
if (sima->flag & SI_COORDFLOATS) {
|
|
||||||
*step= 1;
|
|
||||||
*digits= 3;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
*step= 100;
|
|
||||||
*digits= 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* is used for both read and write... */
|
|
||||||
static void image_editvertex_buts(const bContext *C, uiBlock *block)
|
|
||||||
{
|
|
||||||
Scene *scene= CTX_data_scene(C);
|
|
||||||
SpaceImage *sima= CTX_wm_space_image(C);
|
|
||||||
Image *ima= sima->image;
|
|
||||||
Object *obedit= CTX_data_edit_object(C);
|
|
||||||
static float ocent[2];
|
|
||||||
float cent[2]= {0.0, 0.0};
|
|
||||||
int imx= 256, imy= 256;
|
|
||||||
int nactive= 0, step, digits;
|
|
||||||
EditMesh *em;
|
|
||||||
EditFace *efa;
|
|
||||||
MTFace *tf;
|
|
||||||
|
|
||||||
image_transform_but_attr(sima, &imx, &imy, &step, &digits);
|
|
||||||
|
|
||||||
em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
|
|
||||||
for (efa= em->faces.first; efa; efa= efa->next) {
|
|
||||||
tf= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
|
|
||||||
if (uvedit_face_visible(scene, ima, efa, tf)) {
|
|
||||||
|
|
||||||
if (uvedit_uv_selected(scene, efa, tf, 0)) {
|
|
||||||
cent[0]+= tf->uv[0][0];
|
|
||||||
cent[1]+= tf->uv[0][1];
|
|
||||||
nactive++;
|
|
||||||
}
|
|
||||||
if (uvedit_uv_selected(scene, efa, tf, 1)) {
|
|
||||||
cent[0]+= tf->uv[1][0];
|
|
||||||
cent[1]+= tf->uv[1][1];
|
|
||||||
nactive++;
|
|
||||||
}
|
|
||||||
if (uvedit_uv_selected(scene, efa, tf, 2)) {
|
|
||||||
cent[0]+= tf->uv[2][0];
|
|
||||||
cent[1]+= tf->uv[2][1];
|
|
||||||
nactive++;
|
|
||||||
}
|
|
||||||
if (efa->v4 && uvedit_uv_selected(scene, efa, tf, 3)) {
|
|
||||||
cent[0]+= tf->uv[3][0];
|
|
||||||
cent[1]+= tf->uv[3][1];
|
|
||||||
nactive++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(block) { // do the buttons
|
|
||||||
if (nactive) {
|
|
||||||
ocent[0]= cent[0]/nactive;
|
|
||||||
ocent[1]= cent[1]/nactive;
|
|
||||||
if (sima->flag & SI_COORDFLOATS) {
|
|
||||||
} else {
|
|
||||||
ocent[0] *= imx;
|
|
||||||
ocent[1] *= imy;
|
|
||||||
}
|
|
||||||
|
|
||||||
uiBlockBeginAlign(block);
|
|
||||||
uiDefButF(block, NUM, B_TRANS_IMAGE, "X:", 10, 10, 145, 19, &ocent[0], -10*imx, 10.0*imx, step, digits, "");
|
|
||||||
uiDefButF(block, NUM, B_TRANS_IMAGE, "Y:", 165, 10, 145, 19, &ocent[1], -10*imy, 10.0*imy, step, digits, "");
|
|
||||||
uiBlockEndAlign(block);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else { // apply event
|
|
||||||
float delta[2];
|
|
||||||
|
|
||||||
cent[0]= cent[0]/nactive;
|
|
||||||
cent[1]= cent[1]/nactive;
|
|
||||||
|
|
||||||
if (sima->flag & SI_COORDFLOATS) {
|
|
||||||
delta[0]= ocent[0]-cent[0];
|
|
||||||
delta[1]= ocent[1]-cent[1];
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
delta[0]= ocent[0]/imx - cent[0];
|
|
||||||
delta[1]= ocent[1]/imy - cent[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
for (efa= em->faces.first; efa; efa= efa->next) {
|
|
||||||
tf= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
|
|
||||||
if (uvedit_face_visible(scene, ima, efa, tf)) {
|
|
||||||
if (uvedit_uv_selected(scene, efa, tf, 0)) {
|
|
||||||
tf->uv[0][0]+= delta[0];
|
|
||||||
tf->uv[0][1]+= delta[1];
|
|
||||||
}
|
|
||||||
if (uvedit_uv_selected(scene, efa, tf, 1)) {
|
|
||||||
tf->uv[1][0]+= delta[0];
|
|
||||||
tf->uv[1][1]+= delta[1];
|
|
||||||
}
|
|
||||||
if (uvedit_uv_selected(scene, efa, tf, 2)) {
|
|
||||||
tf->uv[2][0]+= delta[0];
|
|
||||||
tf->uv[2][1]+= delta[1];
|
|
||||||
}
|
|
||||||
if (efa->v4 && uvedit_uv_selected(scene, efa, tf, 3)) {
|
|
||||||
tf->uv[3][0]+= delta[0];
|
|
||||||
tf->uv[3][1]+= delta[1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
WM_event_add_notifier(C, NC_IMAGE, sima->image);
|
|
||||||
}
|
|
||||||
|
|
||||||
BKE_mesh_end_editmesh(obedit->data, em);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* is used for both read and write... */
|
/* is used for both read and write... */
|
||||||
|
|
||||||
static int image_panel_poll(const bContext *C, PanelType *UNUSED(pt))
|
static int image_panel_poll(const bContext *C, PanelType *UNUSED(pt))
|
||||||
@@ -976,22 +847,6 @@ void uiTemplateImageLayers(uiLayout *layout, bContext *C, Image *ima, ImageUser
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int image_panel_uv_poll(const bContext *C, PanelType *UNUSED(pt))
|
|
||||||
{
|
|
||||||
Object *obedit= CTX_data_edit_object(C);
|
|
||||||
return ED_uvedit_test(obedit);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void image_panel_uv(const bContext *C, Panel *pa)
|
|
||||||
{
|
|
||||||
uiBlock *block;
|
|
||||||
|
|
||||||
block= uiLayoutAbsoluteBlock(pa->layout);
|
|
||||||
uiBlockSetHandleFunc(block, do_image_panel_events, NULL);
|
|
||||||
|
|
||||||
image_editvertex_buts(C, block);
|
|
||||||
}
|
|
||||||
|
|
||||||
void image_buttons_register(ARegionType *art)
|
void image_buttons_register(ARegionType *art)
|
||||||
{
|
{
|
||||||
PanelType *pt;
|
PanelType *pt;
|
||||||
@@ -1009,13 +864,6 @@ void image_buttons_register(ARegionType *art)
|
|||||||
strcpy(pt->label, "Grease Pencil");
|
strcpy(pt->label, "Grease Pencil");
|
||||||
pt->draw= gpencil_panel_standard;
|
pt->draw= gpencil_panel_standard;
|
||||||
BLI_addtail(&art->paneltypes, pt);
|
BLI_addtail(&art->paneltypes, pt);
|
||||||
|
|
||||||
pt= MEM_callocN(sizeof(PanelType), "spacetype image panel uv");
|
|
||||||
strcpy(pt->idname, "IMAGE_PT_uv");
|
|
||||||
strcpy(pt->label, "UV Vertex");
|
|
||||||
pt->draw= image_panel_uv;
|
|
||||||
pt->poll= image_panel_uv_poll;
|
|
||||||
BLI_addtail(&art->paneltypes, pt);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int image_properties(bContext *C, wmOperator *UNUSED(op))
|
static int image_properties(bContext *C, wmOperator *UNUSED(op))
|
||||||
|
@@ -989,6 +989,7 @@ void ED_spacetype_image(void)
|
|||||||
BLI_addhead(&st->regiontypes, art);
|
BLI_addhead(&st->regiontypes, art);
|
||||||
|
|
||||||
image_buttons_register(art);
|
image_buttons_register(art);
|
||||||
|
ED_uvedit_buttons_register(art);
|
||||||
|
|
||||||
/* regions: statistics/scope buttons */
|
/* regions: statistics/scope buttons */
|
||||||
art= MEM_callocN(sizeof(ARegionType), "spacetype image region");
|
art= MEM_callocN(sizeof(ARegionType), "spacetype image region");
|
||||||
|
@@ -33,6 +33,7 @@ set(INC
|
|||||||
)
|
)
|
||||||
|
|
||||||
set(SRC
|
set(SRC
|
||||||
|
uvedit_buttons.c
|
||||||
uvedit_draw.c
|
uvedit_draw.c
|
||||||
uvedit_ops.c
|
uvedit_ops.c
|
||||||
uvedit_parametrizer.c
|
uvedit_parametrizer.c
|
||||||
|
233
source/blender/editors/uvedit/uvedit_buttons.c
Normal file
233
source/blender/editors/uvedit/uvedit_buttons.c
Normal file
@@ -0,0 +1,233 @@
|
|||||||
|
/*
|
||||||
|
* $Id$
|
||||||
|
*
|
||||||
|
* ***** BEGIN GPL LICENSE BLOCK *****
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*
|
||||||
|
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s): Blender Foundation, 2002-2009
|
||||||
|
*
|
||||||
|
* ***** END GPL LICENSE BLOCK *****
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** \file blender/editors/uvedit/uvedit_buttons.c
|
||||||
|
* \ingroup eduv
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "MEM_guardedalloc.h"
|
||||||
|
|
||||||
|
#include "DNA_meshdata_types.h"
|
||||||
|
#include "DNA_object_types.h"
|
||||||
|
#include "DNA_scene_types.h"
|
||||||
|
#include "DNA_screen_types.h"
|
||||||
|
#include "DNA_space_types.h"
|
||||||
|
|
||||||
|
#include "BLI_blenlib.h"
|
||||||
|
#include "BLI_math.h"
|
||||||
|
#include "BLI_editVert.h"
|
||||||
|
#include "BLI_utildefines.h"
|
||||||
|
|
||||||
|
#include "BKE_context.h"
|
||||||
|
#include "BKE_customdata.h"
|
||||||
|
#include "BKE_mesh.h"
|
||||||
|
#include "BKE_screen.h"
|
||||||
|
|
||||||
|
#include "ED_image.h"
|
||||||
|
#include "ED_uvedit.h"
|
||||||
|
|
||||||
|
#include "UI_interface.h"
|
||||||
|
#include "UI_resources.h"
|
||||||
|
|
||||||
|
#include "WM_api.h"
|
||||||
|
#include "WM_types.h"
|
||||||
|
|
||||||
|
#define B_UVEDIT_VERTEX 3
|
||||||
|
|
||||||
|
/* UV Utilities */
|
||||||
|
|
||||||
|
static int uvedit_center(Scene *scene, EditMesh *em, Image *ima, float center[2])
|
||||||
|
{
|
||||||
|
EditFace *efa;
|
||||||
|
MTFace *tf;
|
||||||
|
int tot= 0;
|
||||||
|
|
||||||
|
zero_v2(center);
|
||||||
|
|
||||||
|
for(efa= em->faces.first; efa; efa= efa->next) {
|
||||||
|
tf= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
|
||||||
|
|
||||||
|
if(uvedit_face_visible(scene, ima, efa, tf)) {
|
||||||
|
if(uvedit_uv_selected(scene, efa, tf, 0)) {
|
||||||
|
add_v2_v2(center, tf->uv[0]);
|
||||||
|
tot++;
|
||||||
|
}
|
||||||
|
if(uvedit_uv_selected(scene, efa, tf, 1)) {
|
||||||
|
add_v2_v2(center, tf->uv[1]);
|
||||||
|
tot++;
|
||||||
|
}
|
||||||
|
if(uvedit_uv_selected(scene, efa, tf, 2)) {
|
||||||
|
add_v2_v2(center, tf->uv[2]);
|
||||||
|
tot++;
|
||||||
|
}
|
||||||
|
if(efa->v4 && uvedit_uv_selected(scene, efa, tf, 3)) {
|
||||||
|
add_v2_v2(center, tf->uv[3]);
|
||||||
|
tot++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(tot > 0) {
|
||||||
|
center[0] /= tot;
|
||||||
|
center[1] /= tot;
|
||||||
|
}
|
||||||
|
|
||||||
|
return tot;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void uvedit_translate(Scene *scene, EditMesh *em, Image *ima, float delta[2])
|
||||||
|
{
|
||||||
|
EditFace *efa;
|
||||||
|
MTFace *tf;
|
||||||
|
|
||||||
|
for(efa= em->faces.first; efa; efa= efa->next) {
|
||||||
|
tf= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
|
||||||
|
|
||||||
|
if(uvedit_face_visible(scene, ima, efa, tf)) {
|
||||||
|
if(uvedit_uv_selected(scene, efa, tf, 0))
|
||||||
|
add_v2_v2(tf->uv[0], delta);
|
||||||
|
if(uvedit_uv_selected(scene, efa, tf, 1))
|
||||||
|
add_v2_v2(tf->uv[1], delta);
|
||||||
|
if(uvedit_uv_selected(scene, efa, tf, 2))
|
||||||
|
add_v2_v2(tf->uv[2], delta);
|
||||||
|
if(efa->v4 && uvedit_uv_selected(scene, efa, tf, 3))
|
||||||
|
add_v2_v2(tf->uv[3], delta);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Button Functions, using an evil static variable */
|
||||||
|
|
||||||
|
static float uvedit_old_center[2];
|
||||||
|
|
||||||
|
static void uvedit_vertex_buttons(const bContext *C, uiBlock *block)
|
||||||
|
{
|
||||||
|
SpaceImage *sima= CTX_wm_space_image(C);
|
||||||
|
Scene *scene= CTX_data_scene(C);
|
||||||
|
Object *obedit= CTX_data_edit_object(C);
|
||||||
|
Image *ima= sima->image;
|
||||||
|
float center[2];
|
||||||
|
int imx, imy, step, digits;
|
||||||
|
EditMesh *em;
|
||||||
|
|
||||||
|
ED_space_image_size(sima, &imx, &imy);
|
||||||
|
|
||||||
|
em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
|
||||||
|
|
||||||
|
if(uvedit_center(scene, em, ima, center)) {
|
||||||
|
copy_v2_v2(uvedit_old_center, center);
|
||||||
|
|
||||||
|
if(!(sima->flag & SI_COORDFLOATS)) {
|
||||||
|
uvedit_old_center[0] *= imx;
|
||||||
|
uvedit_old_center[1] *= imy;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(sima->flag & SI_COORDFLOATS) {
|
||||||
|
step= 1;
|
||||||
|
digits= 3;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
step= 100;
|
||||||
|
digits= 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
uiBlockBeginAlign(block);
|
||||||
|
uiDefButF(block, NUM, B_UVEDIT_VERTEX, "X:", 10, 10, 145, 19, &uvedit_old_center[0], -10*imx, 10.0*imx, step, digits, "");
|
||||||
|
uiDefButF(block, NUM, B_UVEDIT_VERTEX, "Y:", 165, 10, 145, 19, &uvedit_old_center[1], -10*imy, 10.0*imy, step, digits, "");
|
||||||
|
uiBlockEndAlign(block);
|
||||||
|
}
|
||||||
|
|
||||||
|
BKE_mesh_end_editmesh(obedit->data, em);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void do_uvedit_vertex(bContext *C, void *UNUSED(arg), int event)
|
||||||
|
{
|
||||||
|
SpaceImage *sima= CTX_wm_space_image(C);
|
||||||
|
Scene *scene= CTX_data_scene(C);
|
||||||
|
Object *obedit= CTX_data_edit_object(C);
|
||||||
|
Image *ima= sima->image;
|
||||||
|
EditMesh *em;
|
||||||
|
float center[2], delta[2];
|
||||||
|
int imx, imy;
|
||||||
|
|
||||||
|
if(event != B_UVEDIT_VERTEX)
|
||||||
|
return;
|
||||||
|
|
||||||
|
em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
|
||||||
|
|
||||||
|
ED_space_image_size(sima, &imx, &imy);
|
||||||
|
uvedit_center(scene, em, ima, center);
|
||||||
|
|
||||||
|
if(sima->flag & SI_COORDFLOATS) {
|
||||||
|
delta[0]= uvedit_old_center[0] - center[0];
|
||||||
|
delta[1]= uvedit_old_center[1] - center[1];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
delta[0]= uvedit_old_center[0]/imx - center[0];
|
||||||
|
delta[1]= uvedit_old_center[1]/imy - center[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
uvedit_translate(scene, em, ima, delta);
|
||||||
|
|
||||||
|
BKE_mesh_end_editmesh(obedit->data, em);
|
||||||
|
|
||||||
|
WM_event_add_notifier(C, NC_IMAGE, sima->image);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Panels */
|
||||||
|
|
||||||
|
static int image_panel_uv_poll(const bContext *C, PanelType *UNUSED(pt))
|
||||||
|
{
|
||||||
|
Object *obedit= CTX_data_edit_object(C);
|
||||||
|
return ED_uvedit_test(obedit);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void image_panel_uv(const bContext *C, Panel *pa)
|
||||||
|
{
|
||||||
|
uiBlock *block;
|
||||||
|
|
||||||
|
block= uiLayoutAbsoluteBlock(pa->layout);
|
||||||
|
uiBlockSetHandleFunc(block, do_uvedit_vertex, NULL);
|
||||||
|
|
||||||
|
uvedit_vertex_buttons(C, block);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ED_uvedit_buttons_register(ARegionType *art)
|
||||||
|
{
|
||||||
|
PanelType *pt;
|
||||||
|
|
||||||
|
pt= MEM_callocN(sizeof(PanelType), "spacetype image panel uv");
|
||||||
|
strcpy(pt->idname, "IMAGE_PT_uv");
|
||||||
|
strcpy(pt->label, "UV Vertex");
|
||||||
|
pt->draw= image_panel_uv;
|
||||||
|
pt->poll= image_panel_uv_poll;
|
||||||
|
BLI_addtail(&art->paneltypes, pt);
|
||||||
|
}
|
||||||
|
|
Reference in New Issue
Block a user