Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2006-01-04 18:47:16 +0300
committerTon Roosendaal <ton@blender.org>2006-01-04 18:47:16 +0300
commited2b55585d7c28f980d264e9add5079adde9209c (patch)
treea678bc1eee89b054693e3c3a6cd6b5bbdc4b75db /source/blender
parentec01a66a6b21d4bde016533af4004d2bfeba5162 (diff)
parent4cb838d54f6a84e2717fce580a65d205f3980b03 (diff)
Wednesday sync orange with bf-blender
Note: has the crazyspace fix!
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/python/api2_2x/Armature.c1
-rw-r--r--source/blender/python/api2_2x/doc/Lamp.py10
-rw-r--r--source/blender/python/api2_2x/doc/Object.py22
-rwxr-xr-xsource/blender/src/transform_conversions.c147
4 files changed, 123 insertions, 57 deletions
diff --git a/source/blender/python/api2_2x/Armature.c b/source/blender/python/api2_2x/Armature.c
index a2a3db05bc8..743956a1f61 100644
--- a/source/blender/python/api2_2x/Armature.c
+++ b/source/blender/python/api2_2x/Armature.c
@@ -465,6 +465,7 @@ static PyObject *Armature_update(BPy_Armature *self)
if (!BonesDict_InitBones(self->Bones))
return NULL;
self->Bones->editmode_flag = 0;
+ BLI_freelistN(&self->Bones->editbones);
}else{
goto AttributeError;
diff --git a/source/blender/python/api2_2x/doc/Lamp.py b/source/blender/python/api2_2x/doc/Lamp.py
index 52ec301f994..b1e0754c05c 100644
--- a/source/blender/python/api2_2x/doc/Lamp.py
+++ b/source/blender/python/api2_2x/doc/Lamp.py
@@ -38,6 +38,16 @@ Example::
- 'Square'
- 'NoDiffuse'
- 'RayShadow'
+
+Example::
+ from Blender import Lamp, Object
+ # Change the mode of selected lamp objects.
+ for ob in Object.GetSelected(): # Loop through the current selection
+ if ob.getType() == "Lamp": # if this is a lamp.
+ lamp = ob.getData() # get the lamp data.
+ if lamp.type == Lamp.Types["Spot"]: # Lamp type is not a flag
+ lamp.mode &= ~Lamp.Modes["RayShadow"] # Disable RayShadow.
+ lamp.mode |= Lamp.Modes["Shadows"] # Enable Shadowbuffer shadows
"""
def New (type = 'Lamp', name = 'LampData'):
diff --git a/source/blender/python/api2_2x/doc/Object.py b/source/blender/python/api2_2x/doc/Object.py
index dac594d9259..bddf09c92cd 100644
--- a/source/blender/python/api2_2x/doc/Object.py
+++ b/source/blender/python/api2_2x/doc/Object.py
@@ -91,9 +91,8 @@ def Get (name = None):
def GetSelected ():
"""
- Get the selected objects on visible layers from Blenders current scene. If no objects are selected, an empty
- list will be returned.
- The active object of the current scene will always be the first object in the list (if selected).
+ Get the user selection. If no objects are selected, an empty list will be returned.
+
@return: A list of all selected Objects in the current scene.
I{B{Example:}}
@@ -104,6 +103,10 @@ def GetSelected ():
objects = Blender.Object.GetSelected()
print objects
+ @note: The active object will always be the first object in the list (if selected).
+ @note: The user selection is made up of selected objects from Blenders current scene.
+ @note: The user selection is limited to objects on visible layers,
+ if the users last active 3d view is in localview then the selection will be limited to the objects in that localview.
"""
@@ -156,19 +159,6 @@ def Duplicate (mesh=0, surface=0, curve=0, text=0, metaball=0, armature=0, lamp=
activeObject.LocX += 1
Blender.Redraw()
"""
-'''
-def Join ():
- """
- Joins selected objects on visible layers from Blenders current scene.
- The active object is used as a base for all other objects of the same type to join into - just like pressing Ctrl+J
-
- @return: None
- @note: Being in edit mode, mesh objects with keys and a large number of verts in the
- resulting mesh will all raise a RuntimeError.
- @note: The join may be unsucsessfull because of the selection or object types and no error raised.
- Checking if the number of selected objects has changed is a way to know the join worked.
- """
-'''
class Object:
"""
diff --git a/source/blender/src/transform_conversions.c b/source/blender/src/transform_conversions.c
index b47cd8e4585..8708981063a 100755
--- a/source/blender/src/transform_conversions.c
+++ b/source/blender/src/transform_conversions.c
@@ -1398,6 +1398,8 @@ static void VertsToTransData(TransData *td, EditVert *eve)
td->tdmir= NULL;
}
+/* *********************** CrazySpace correction. Now without doing subsurf optimal ****************** */
+
static void make_vertexcos__mapFunc(void *userData, int index, float *co, float *no_f, short *no_s)
{
float *vec = userData;
@@ -1406,73 +1408,136 @@ static void make_vertexcos__mapFunc(void *userData, int index, float *co, float
VECCOPY(vec, co);
}
-static float *get_mapped_editverts(void)
+/* hurmf, copy from buttons_editing.c, i have to sort this out what it means... */
+static void modifiers_setOnCage(void *ob_v, void *md_v)
{
- int needsFree;
- DerivedMesh *dm= editmesh_get_derived_cage(&needsFree);
+ Object *ob = ob_v;
+ ModifierData *md;
+
+ int i, cageIndex = modifiers_getCageIndex(ob, NULL );
+
+ for( i = 0, md=ob->modifiers.first; md; ++i, md=md->next )
+ if( md == md_v ) {
+ if( i >= cageIndex )
+ md->mode ^= eModifierMode_OnCage;
+ break;
+ }
+}
+
+
+/* disable subsurf temporal, get mapped cos, and enable it */
+static float *get_crazy_mapped_editverts(void)
+{
+ DerivedMesh *dm;
+ ModifierData *md;
float *vertexcos;
+ int needsFree;
+ int i;
- vertexcos= MEM_mallocN(3*sizeof(float)*G.totvert, "vertexcos map");
+ for( i = 0, md=G.obedit->modifiers.first; md; ++i, md=md->next ) {
+ if(md->type==eModifierType_Subsurf)
+ if(md->mode & eModifierMode_OnCage)
+ break;
+ }
+ if(md) {
+ /* this call disables subsurf and enables the underlying modifier to deform, apparently */
+ modifiers_setOnCage(G.obedit, md);
+ /* make it all over */
+ makeDispListMesh(G.obedit);
+ }
+ /* now get the cage */
+ dm= editmesh_get_derived_cage(&needsFree);
+
+ vertexcos= MEM_mallocN(3*sizeof(float)*G.totvert, "vertexcos map");
dm->foreachMappedVert(dm, make_vertexcos__mapFunc, vertexcos);
if (needsFree) dm->release(dm);
+
+ if(md) {
+ /* set back the flag, no new cage needs to be built, transform does it */
+ modifiers_setOnCage(G.obedit, md);
+ }
+
return vertexcos;
}
-/* helper for below, interpolates or assigns and increments */
-static float *crazy_quat_blend(EditVert *eve, float *quat)
+#define TAN_MAKE_VEC(a, b, c) a[0]= b[0] + 0.2f*(b[0]-c[0]); a[1]= b[1] + 0.2f*(b[1]-c[1]); a[2]= b[2] + 0.2f*(b[2]-c[2])
+static void set_crazy_vertex_quat(float *quat, float *v1, float *v2, float *v3, float *def1, float *def2, float *def3)
{
- if(eve->tmp.fp == NULL) {
- eve->tmp.fp = quat;
- QUATCOPY(quat+4, quat);
- return quat+4;
- }
- else {
- float *q1= eve->tmp.fp;
- QuatInterpol(q1, q1, quat, 0.5f);
- return quat;
- }
+ float vecu[3], vecv[3];
+ float q1[4], q2[4];
+
+ TAN_MAKE_VEC(vecu, v1, v2);
+ TAN_MAKE_VEC(vecv, v1, v3);
+ triatoquat(v1, vecu, vecv, q1);
+
+ TAN_MAKE_VEC(vecu, def1, def2);
+ TAN_MAKE_VEC(vecv, def1, def3);
+ triatoquat(def1, vecu, vecv, q2);
+
+ QuatSub(quat, q2, q1);
}
+#undef TAN_MAKE_VEC
static void set_crazyspace_quats(float *mappedcos, float *quats)
{
EditMesh *em = G.editMesh;
EditVert *eve, *prev;
EditFace *efa;
- float q1[4], q2[4];
- float *v1, *v2, *v3, *quatp;
+ float *v1, *v2, *v3, *v4;
int index= 0;
- /* 2 abused locations in vertices */
+ /* two abused locations in vertices */
for(eve= em->verts.first; eve; eve= eve->next, index++) {
eve->tmp.fp = NULL;
eve->prev= (EditVert *)index;
}
- quatp= quats;
+ /* first store two sets of tangent vectors in vertices, we derive it just from the face-edges */
for(efa= em->faces.first; efa; efa= efa->next) {
- /* vertex f1 flags were set for transform */
- if( (efa->v1->f1 && efa->v1->tmp.fp==NULL) ||
- (efa->v2->f1 && efa->v2->tmp.fp==NULL) ||
- (efa->v3->f1 && efa->v3->tmp.fp==NULL) ||
- (efa->v4 && efa->v4->f1 && efa->v4->tmp.fp==NULL) ) {
+ /* retrieve mapped coordinates */
+ v1= mappedcos + 3*( (int)(efa->v1->prev) );
+ v2= mappedcos + 3*( (int)(efa->v2->prev) );
+ v3= mappedcos + 3*( (int)(efa->v3->prev) );
- triatoquat(efa->v1->co, efa->v2->co, efa->v3->co, q1);
-
- /* retrieve mapped coordinates */
- v1= mappedcos + 3*( (int)(efa->v1->prev) );
- v2= mappedcos + 3*( (int)(efa->v2->prev) );
- v3= mappedcos + 3*( (int)(efa->v3->prev) );
- triatoquat(v1, v2, v3, q2);
-
- QuatSub(quatp, q2, q1);
+ if(efa->v2->tmp.fp==NULL && efa->v2->f1) {
+ set_crazy_vertex_quat(quats, efa->v2->co, efa->v3->co, efa->v1->co, v2, v3, v1);
+ efa->v2->tmp.fp= quats;
+ quats+= 4;
+ }
+
+ if(efa->v4) {
+ v4= mappedcos + 3*( (int)(efa->v4->prev) );
- if(efa->v1->f1) quatp= crazy_quat_blend(efa->v1, quatp);
- if(efa->v2->f1) quatp= crazy_quat_blend(efa->v2, quatp);
- if(efa->v3->f1) quatp= crazy_quat_blend(efa->v3, quatp);
- if(efa->v4 && efa->v4->f1) quatp= crazy_quat_blend(efa->v4, quatp);
+ if(efa->v1->tmp.fp==NULL && efa->v1->f1) {
+ set_crazy_vertex_quat(quats, efa->v1->co, efa->v2->co, efa->v4->co, v1, v2, v4);
+ efa->v1->tmp.fp= quats;
+ quats+= 4;
+ }
+ if(efa->v3->tmp.fp==NULL && efa->v3->f1) {
+ set_crazy_vertex_quat(quats, efa->v3->co, efa->v4->co, efa->v2->co, v3, v4, v2);
+ efa->v3->tmp.fp= quats;
+ quats+= 4;
+ }
+ if(efa->v4->tmp.fp==NULL && efa->v4->f1) {
+ set_crazy_vertex_quat(quats, efa->v4->co, efa->v1->co, efa->v3->co, v4, v1, v3);
+ efa->v4->tmp.fp= quats;
+ quats+= 4;
+ }
+ }
+ else {
+ if(efa->v1->tmp.fp==NULL && efa->v1->f1) {
+ set_crazy_vertex_quat(quats, efa->v1->co, efa->v2->co, efa->v3->co, v1, v2, v3);
+ efa->v1->tmp.fp= quats;
+ quats+= 4;
+ }
+ if(efa->v3->tmp.fp==NULL && efa->v3->f1) {
+ set_crazy_vertex_quat(quats, efa->v3->co, efa->v1->co, efa->v2->co, v3, v1, v2);
+ efa->v3->tmp.fp= quats;
+ quats+= 4;
+ }
}
}
@@ -1552,9 +1617,9 @@ static void createTransEditVerts(TransInfo *t)
if(propmode==0) {
if(modifiers_getCageIndex(G.obedit, NULL)>=0) {
if(modifiers_isDeformed(G.obedit)) {
- mappedcos= get_mapped_editverts();
- /* add one more quaternion, because of crazy_quat_blend */
- quats= MEM_mallocN( (t->total+1)*sizeof(float)*4, "crazy quats");
+ /* disable subsurf temporal, get mapped cos, and enable it */
+ mappedcos= get_crazy_mapped_editverts();
+ quats= MEM_mallocN( (t->total)*sizeof(float)*4, "crazy quats");
set_crazyspace_quats(mappedcos, quats);
}
}