[Bf-blender-cvs] [dbccccc0a57] custom-manipulators: Merge branch 'blender2.8' into custom-manipulators
Campbell Barton
noreply at git.blender.org
Thu Apr 6 04:33:11 CEST 2017
Commit: dbccccc0a575f7352876fb32f5973615e6761767
Author: Campbell Barton
Date: Thu Apr 6 12:32:44 2017 +1000
Branches: custom-manipulators
https://developer.blender.org/rBdbccccc0a575f7352876fb32f5973615e6761767
Merge branch 'blender2.8' into custom-manipulators
===================================================================
===================================================================
diff --cc source/blender/editors/transform/transform_manipulator.c
index 960d80762bd,4841b136f1d..4390af496c2
--- a/source/blender/editors/transform/transform_manipulator.c
+++ b/source/blender/editors/transform/transform_manipulator.c
@@@ -478,19 -145,13 +478,19 @@@ static void protectflag_to_drawflags(sh
}
/* for pose mode */
- static void stats_pchan(Scene *scene, Object *ob, RegionView3D *rv3d, bPoseChannel *pchan)
-static void protectflag_to_drawflags_pchan(RegionView3D *rv3d, const bPoseChannel *pchan)
++static void protectflag_to_drawflags_pchan(Scene *scene, Object *ob, RegionView3D *rv3d, bPoseChannel *pchan)
{
- protectflag_to_drawflags(pchan->protectflag, &rv3d->twdrawflag);
+ Bone *bone = pchan->bone;
+ if (bone) {
+ /* update pose matrix after transform */
+ BKE_pose_where_is(scene, ob);
+
+ protectflag_to_drawflags(pchan->protectflag, &rv3d->twdrawflag);
+ }
}
/* for editmode*/
- static void stats_editbone(RegionView3D *rv3d, EditBone *ebo)
-static void protectflag_to_drawflags_ebone(RegionView3D *rv3d, const EditBone *ebo)
++static void protectflag_to_drawflags_ebone(RegionView3D *rv3d, EditBone *ebo)
{
if (ebo->flag & BONE_EDITMODE_LOCKED) {
protectflag_to_drawflags(OB_LOCK_LOC | OB_LOCK_ROT | OB_LOCK_SCALE, &rv3d->twdrawflag);
@@@ -867,7 -528,7 +867,7 @@@ static int calc_manipulator_stats(cons
Bone *bone = pchan->bone;
if (bone) {
calc_tw_center(scene, pchan->pose_head);
- stats_pchan(scene, ob, rv3d, pchan);
- protectflag_to_drawflags_pchan(rv3d, pchan);
++ protectflag_to_drawflags_pchan(scene, ob, rv3d, pchan);
totsel = 1;
ok = true;
}
@@@ -881,7 -542,7 +881,7 @@@
Bone *bone = pchan->bone;
if (bone && (bone->flag & BONE_TRANSFORM)) {
calc_tw_center(scene, pchan->pose_head);
- stats_pchan(scene, ob, rv3d, pchan);
- protectflag_to_drawflags_pchan(rv3d, pchan);
++ protectflag_to_drawflags_pchan(scene, ob, rv3d, pchan);
}
}
ok = true;
@@@ -1041,60 -699,101 +1041,60 @@@ static void drawflags_posemode(Object *
}
}
-
-/* ******************** DRAWING STUFFIES *********** */
-
-static float screen_aligned(RegionView3D *rv3d, float mat[4][4])
+static void drawflags_editmode(Object *obedit, View3D *v3d, RegionView3D *rv3d)
{
- gpuTranslate3fv(mat[3]);
-
- /* sets view screen aligned */
- gpuRotate3f(-360.0f * saacos(rv3d->viewquat[0]) / (float)M_PI, rv3d->viewquat[1], rv3d->viewquat[2], rv3d->viewquat[3]);
-
- return len_v3(mat[0]); /* draw scale */
-}
-
+ if ((obedit->lay & v3d->lay) == 0)
+ return;
-/* radring = radius of doughnut rings
- * radhole = radius hole
- * start = starting segment (based on nrings)
- * end = end segment
- * nsides = amount of points in ring
- * nrigns = amount of rings
- */
-static void partial_doughnut(unsigned int pos, float radring, float radhole, int start, int end, int nsides, int nrings)
-{
- float theta, phi, theta1;
- float cos_theta, sin_theta;
- float cos_theta1, sin_theta1;
- float ring_delta, side_delta;
- int i, j, do_caps = true;
-
- if (start == 0 && end == nrings) do_caps = false;
-
- ring_delta = 2.0f * (float)M_PI / (float)nrings;
- side_delta = 2.0f * (float)M_PI / (float)nsides;
-
- theta = (float)M_PI + 0.5f * ring_delta;
- cos_theta = cosf(theta);
- sin_theta = sinf(theta);
-
- for (i = nrings - 1; i >= 0; i--) {
- theta1 = theta + ring_delta;
- cos_theta1 = cosf(theta1);
- sin_theta1 = sinf(theta1);
-
- if (do_caps && i == start) { // cap
- immBegin(GL_TRIANGLE_FAN, nsides+1);
- phi = 0.0;
- for (j = nsides; j >= 0; j--) {
- float cos_phi, sin_phi, dist;
-
- phi += side_delta;
- cos_phi = cosf(phi);
- sin_phi = sinf(phi);
- dist = radhole + radring * cos_phi;
-
- immVertex3f(pos, cos_theta1 * dist, -sin_theta1 * dist, radring * sin_phi);
- }
- immEnd();
+ if (obedit->type == OB_ARMATURE) {
+ const bArmature *arm = obedit->data;
+ EditBone *ebo;
+ if ((v3d->around == V3D_AROUND_ACTIVE) && (ebo = arm->act_edbone)) {
- stats_editbone(rv3d, ebo);
++ protectflag_to_drawflags_ebone(rv3d, ebo);
}
- if (i >= start && i <= end) {
- immBegin(GL_TRIANGLE_STRIP, (nsides+1) * 2);
- phi = 0.0;
- for (j = nsides; j >= 0; j--) {
- float cos_phi, sin_phi, dist;
-
- phi += side_delta;
- cos_phi = cosf(phi);
- sin_phi = sinf(phi);
- dist = radhole + radring * cos_phi;
-
- immVertex3f(pos, cos_theta1 * dist, -sin_theta1 * dist, radring * sin_phi);
- immVertex3f(pos, cos_theta * dist, -sin_theta * dist, radring * sin_phi);
+ else {
+ for (ebo = arm->edbo->first; ebo; ebo = ebo->next) {
+ if (EBONE_VISIBLE(arm, ebo)) {
+ if (ebo->flag & BONE_SELECTED) {
- stats_editbone(rv3d, ebo);
++ protectflag_to_drawflags_ebone(rv3d, ebo);
+ }
+ }
}
- immEnd();
}
+ }
+}
- if (do_caps && i == end) { // cap
- immBegin(GL_TRIANGLE_FAN, nsides+1);
- phi = 0.0;
- for (j = nsides; j >= 0; j--) {
- float cos_phi, sin_phi, dist;
+/**
+ * Refresh RegionView3D.twdrawflag based on protect-flags.
+ */
+static void manipulator_drawflags_refresh(const bContext *C, View3D *v3d, RegionView3D *rv3d)
+{
+ SceneLayer *sl = CTX_data_scene_layer(C);
+ Object *ob = OBACT_NEW, *obedit = CTX_data_edit_object(C);
+ bGPdata *gpd = CTX_data_gpencil_data(C);
+ const bool is_gp_edit = ((gpd) && (gpd->flag & GP_DATA_STROKE_EDITMODE));
- phi -= side_delta;
- cos_phi = cosf(phi);
- sin_phi = sinf(phi);
- dist = radhole + radring * cos_phi;
+ /* all enabled */
+ rv3d->twdrawflag = 0xFFFF;
- immVertex3f(pos, cos_theta * dist, -sin_theta * dist, radring * sin_phi);
+ if (is_gp_edit) {
+ /* pass */
+ }
+ else if (obedit) {
+ drawflags_editmode(obedit, v3d, rv3d);
+ }
+ else if (ob && (ob->mode & OB_MODE_POSE)) {
+ drawflags_posemode(ob, v3d, rv3d);
+ }
+ else if (ob && (ob->mode & OB_MODE_ALL_PAINT)) {
+ /* pass */
+ }
+ else {
+ for (Base *base = sl->object_bases.first; base; base = base->next) {
+ if (TESTBASELIB_NEW(base)) {
+ protectflag_to_drawflags(base->object->protectflag, &rv3d->twdrawflag);
}
- immEnd();
}
-
-
- theta = theta1;
- cos_theta = cos_theta1;
- sin_theta = sin_theta1;
}
}
More information about the Bf-blender-cvs
mailing list