forked from bartvdbraak/blender
Scripts:
- Campbell Barton updated his sel_same.py script; - Added to Mesh scripts a call to Window.EditMode(0) to leave editmode before changing meshes. BPython: - small doc fixes / updates; - added a call to undo_push_mesh inside Window.EditMode(0). Mesh scripts could change the mesh but not the editmesh -- that would then overwrite the changed mesh. Made all mesh scripts leave edit mode before changing a mesh.
This commit is contained in:
parent
d2da4f7160
commit
6b1eb45dda
@ -378,7 +378,7 @@ def draw():
|
||||
|
||||
|
||||
def event(evt, val):
|
||||
if (evt== QKEY and not val): Exit()
|
||||
if ((evt== QKEY or evt== ESCKEY) and not val): Exit()
|
||||
|
||||
def bevent(evt):
|
||||
global MODEMenu, NSIZE, ng, TMATList
|
||||
@ -430,4 +430,5 @@ def bevent(evt):
|
||||
|
||||
Blender.Redraw()
|
||||
|
||||
Window.EditMode(0)
|
||||
Register(draw, event, bevent)
|
||||
|
@ -657,7 +657,7 @@ def draw():
|
||||
msg = ''
|
||||
|
||||
def event(evt, val):
|
||||
if evt == Draw.QKEY and not val:
|
||||
if (evt == Draw.QKEY or evt == Draw.ESCKEY) and not val:
|
||||
Draw.Exit()
|
||||
if evt == Draw.CKEY and not val:
|
||||
CutMesh()
|
||||
|
@ -107,4 +107,5 @@ def rvk2rvk():
|
||||
Draw.PupMenu('Error| You need to select two meshes.')
|
||||
|
||||
|
||||
Blender.Window.EditMode(0)
|
||||
rvk2rvk()
|
||||
|
@ -61,13 +61,12 @@ else:
|
||||
mesh = object.getData()
|
||||
|
||||
# We have a mesh so find AF.
|
||||
for f in mesh.faces:
|
||||
if f.flag & NMesh.FaceFlags['ACTIVE']:
|
||||
af = f
|
||||
af = mesh.getActiveFace()
|
||||
if af: af = mesh.faces[af]
|
||||
|
||||
if af == None:
|
||||
error('no active face')
|
||||
|
||||
|
||||
else: # Okay everything seems sane
|
||||
|
||||
#=====================================
|
||||
@ -152,7 +151,7 @@ else: # Okay everything seems sane
|
||||
avcolIdx = 0
|
||||
while avcolIdx < len(f1.col):
|
||||
match = 0
|
||||
|
||||
|
||||
vcolIdx = 0
|
||||
while vcolIdx < len(f2.col):
|
||||
if colCompare(f1.col[avcolIdx], f2.col[vcolIdx], limit):
|
||||
@ -164,8 +163,6 @@ else: # Okay everything seems sane
|
||||
avcolIdx += 1
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
# Makes sure face 2 has matching UVs within the limit.
|
||||
def faceUvCompare(f1, f2, limit):
|
||||
for auv in f1.uv:
|
||||
@ -193,7 +190,6 @@ else: # Okay everything seems sane
|
||||
#====================#
|
||||
|
||||
|
||||
|
||||
#=============================#
|
||||
# Blender functions/shortcuts #
|
||||
#=============================#
|
||||
@ -212,7 +208,6 @@ else: # Okay everything seems sane
|
||||
elif len(f.v) == 3:
|
||||
return (measure(f.v[0].co, f.v[1].co), measure(f.v[1].co, f.v[2].co), measure(f.v[2].co, f.v[0].co) )
|
||||
|
||||
|
||||
def faceCent(f):
|
||||
x = y = z = 0
|
||||
for v in f.v:
|
||||
@ -229,7 +224,9 @@ else: # Okay everything seems sane
|
||||
#========================================#
|
||||
def fShouldCompare(f):
|
||||
# Only calculate for faces that will be affected.
|
||||
if faceOp == 1 and f.flag == 1:
|
||||
if len(f.v) < 3: # cant be an edge
|
||||
return 0
|
||||
elif faceOp == 1 and f.flag == 1:
|
||||
return 0
|
||||
elif faceOp == 0 and f.flag == 0:
|
||||
return 0
|
||||
@ -247,10 +244,13 @@ else: # Okay everything seems sane
|
||||
else: setFUnSel(f)
|
||||
|
||||
def get_same_image():
|
||||
for f in mesh.faces:
|
||||
if fShouldCompare(f):
|
||||
if af.image == f.image: setFSel(f)
|
||||
else: setFUnSel(f)
|
||||
if mesh.hasFaceUV() == 0:
|
||||
error('mesh has no uv image')
|
||||
else:
|
||||
for f in mesh.faces:
|
||||
if fShouldCompare(f):
|
||||
if af.image == f.image: setFSel(f)
|
||||
else: setFUnSel(f)
|
||||
|
||||
def get_same_mode():
|
||||
for f in mesh.faces:
|
||||
@ -280,9 +280,7 @@ else: # Okay everything seems sane
|
||||
if compare(afArea, faceArea(f), limit): setFSel(f)
|
||||
else: setFUnSel(f)
|
||||
|
||||
|
||||
def get_same_prop(limit):
|
||||
|
||||
# Here we get the perimeter and use it for a proportional limit modifier.
|
||||
afEdgeLens = getEdgeLengths(af)
|
||||
perim = 0
|
||||
@ -326,10 +324,10 @@ else: # Okay everything seems sane
|
||||
setFSel(f)
|
||||
else:
|
||||
setFUnSel(f)
|
||||
|
||||
#=====================#
|
||||
# End Sel same funcs #
|
||||
#=====================#
|
||||
|
||||
limit = 1 # some of these dont use the limit so it needs to be set, to somthing.
|
||||
# act on the menu item selected
|
||||
if method == 1: # Material
|
||||
@ -365,4 +363,4 @@ else: # Okay everything seems sane
|
||||
|
||||
# If limit is not set then dont bother
|
||||
if limit != None:
|
||||
mesh.update()
|
||||
mesh.update(0)
|
||||
|
@ -1,7 +1,7 @@
|
||||
#!BPY
|
||||
""" Registration info for Blender menus: <- these words are ignored
|
||||
Name: 'UnWeld'
|
||||
Blender: 232
|
||||
Blender: 234
|
||||
Group: 'Mesh'
|
||||
Tip: 'Unweld all faces from a selected and common vertex. Made vertex bevelling.'
|
||||
"""
|
||||
@ -57,6 +57,8 @@ from Blender import Noise
|
||||
from Blender.Draw import *
|
||||
from Blender.BGL import *
|
||||
|
||||
Blender.Window.EditMode(0)
|
||||
|
||||
Nr=Noise.random
|
||||
decal=0.03
|
||||
t=[0.0,0.0,0.0]
|
||||
@ -196,7 +198,7 @@ def D():
|
||||
def E(evt,val):
|
||||
global mouse_x,x,pl,orig,me,debut
|
||||
global mouse_y,y, MouseClickG,MouseClickD,MouseClickM
|
||||
if (evt== QKEY): Exit()
|
||||
if (evt== QKEY or evt== ESCKEY): Exit()
|
||||
|
||||
if (evt == MOUSEX):
|
||||
mouse_x = val
|
||||
|
@ -42,6 +42,7 @@
|
||||
#include <BIF_mywindow.h>
|
||||
#include <BSE_headerbuttons.h>
|
||||
#include <BSE_filesel.h>
|
||||
#include <BIF_editmesh.h> /* for undo_push_mesh() */
|
||||
#include <BIF_screen.h>
|
||||
#include <BIF_space.h>
|
||||
#include <BIF_drawtext.h>
|
||||
@ -666,7 +667,6 @@ static PyObject *M_Window_SetViewQuat(PyObject *self, PyObject *args)
|
||||
{
|
||||
int ok = 0;
|
||||
float val[4];
|
||||
float *vec;
|
||||
|
||||
if (!G.vd) {
|
||||
Py_INCREF (Py_None);
|
||||
@ -715,7 +715,6 @@ static PyObject *M_Window_SetViewOffset(PyObject *self, PyObject *args)
|
||||
{
|
||||
int ok = 0;
|
||||
float val[3];
|
||||
float *vec;
|
||||
|
||||
if (!G.vd) {
|
||||
Py_INCREF (Py_None);
|
||||
@ -773,7 +772,10 @@ static PyObject *M_Window_EditMode(PyObject *self, PyObject *args)
|
||||
if (status) {
|
||||
if (!G.obedit) enter_editmode();
|
||||
}
|
||||
else if (G.obedit) exit_editmode(1);
|
||||
else if (G.obedit) {
|
||||
undo_push_mesh("From script"); /* use better solution after 2.34 */
|
||||
exit_editmode(1);
|
||||
}
|
||||
}
|
||||
|
||||
return Py_BuildValue("h", G.obedit?1:0);
|
||||
|
@ -20,7 +20,7 @@ The Blender Python API Reference
|
||||
- L{Draw} (*)
|
||||
- L{Effect}
|
||||
- L{Image} (*)
|
||||
- L{Ipo}
|
||||
- L{Ipo} (*)
|
||||
- L{Lamp} (*)
|
||||
- L{Lattice}
|
||||
- L{Library}
|
||||
|
@ -3,6 +3,8 @@
|
||||
"""
|
||||
The Blender.Ipo submodule
|
||||
|
||||
B{New}: Ipo updates to both the program and bpython acess.
|
||||
|
||||
This module provides access to the Ipo Data in Blender. An Ipo is composed of
|
||||
several Ipocurves.
|
||||
|
||||
@ -91,8 +93,8 @@ class Ipo:
|
||||
8. Key Ipo: Speed, 'Key 1' - 'Key 31'.
|
||||
9. Action Ipo: LocX, LocY, LocZ, SizeX, SizeY, SizeZ,
|
||||
QuatX, QuatY, QuatZ, QuatW.
|
||||
10.Sequence Ipo: Fac.
|
||||
11.Constraint Ipo: Inf.
|
||||
10. Sequence Ipo: Fac.
|
||||
11. Constraint Ipo: Inf.
|
||||
|
||||
@type curvename : string
|
||||
@rtype: IpoCurve object
|
||||
|
@ -400,7 +400,7 @@ class NMesh:
|
||||
@rtype: bool
|
||||
@return: True if successful or False if this NMesh wasn't linked to a real
|
||||
Blender Mesh yet (or was, but the Mesh had no keys).
|
||||
@warn: Currently the mesh keys from meshs that are grabbed with
|
||||
@warn: Currently the mesh keys from meshes that are grabbed with
|
||||
NMesh.GetRaw() or .GetRawFromObject() are preserved, so if you want to
|
||||
clear them or don't want them at all, remember to call this method. Of
|
||||
course NMeshes created with NMesh.New() don't have mesh keys until you
|
||||
|
Loading…
Reference in New Issue
Block a user