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>2005-07-22 02:03:27 +0400
committerTon Roosendaal <ton@blender.org>2005-07-22 02:03:27 +0400
commit96a6a38e00fe150d297cf3f80eb97250d9fafd82 (patch)
treed9b6e44fdc97d4dec8369933f60bc13a336a6ba7 /source/blender/src
parent24f2b61fdba0721ba76839570ea44cefc0ea0e63 (diff)
New drawmode for the Armature geeks!
It was noticed that Bones dont perform well in 'xray' drawing, for that purpose a very minimal style would serve best. This new option "Line" draws a solid line with bitmap circles in endings. http://www.blender.org/cms/Armature_draw_modes.629.0.html Or temporal pics: http://www.blender.org/bf/rt1.jpg http://www.blender.org/bf/rt.jpg
Diffstat (limited to 'source/blender/src')
-rw-r--r--source/blender/src/buttons_editing.c21
-rw-r--r--source/blender/src/drawarmature.c151
-rw-r--r--source/blender/src/editnla.c5
3 files changed, 155 insertions, 22 deletions
diff --git a/source/blender/src/buttons_editing.c b/source/blender/src/buttons_editing.c
index 09db99e7bf5..a0f983b5b2d 100644
--- a/source/blender/src/buttons_editing.c
+++ b/source/blender/src/buttons_editing.c
@@ -1778,24 +1778,25 @@ static void editing_panel_armature_type(Object *ob, bArmature *arm)
{
uiBlock *block;
uiBut *but;
- int bx=148, by=120;
block= uiNewBlock(&curarea->uiblocks, "editing_panel_armature_type", UI_EMBOSS, UI_HELV, curarea->win);
if(uiNewPanel(curarea, block, "Armature", "Editing", 320, 0, 318, 204)==0) return;
+ uiBlockBeginAlign(block);
but = uiDefButI(block, TOG|BIT|ARM_RESTPOSBIT,REDRAWVIEW3D,
- "Rest Pos", bx,by,97,20, &arm->flag, 0, 0, 0, 0,
- "Disable all animation for this object");
+ "Rest Position", 10,180,150,20, &arm->flag, 0, 0, 0, 0, "Disable all animation for this object");
uiButSetFunc(but, armature_rest_pos_func, ob, arm);
+ uiDefButI(block, TOG|BIT|ARM_DELAYBIT,REDRAWVIEW3D, "Delay Deform", 160, 180,150,20, &arm->flag, 0, 0, 0, 0, "Don't deform children when manipulating bones in pose mode");
+
+ uiBlockBeginAlign(block);
+ uiDefButI(block, ROW, REDRAWVIEW3D, "Octahedron", 10, 140,100,20, &arm->drawtype, 0, ARM_OCTA, 0, 0, "Draw bone as octahedra");
+ uiDefButI(block, ROW, REDRAWVIEW3D, "Lines", 110, 140,100,20, &arm->drawtype, 0, ARM_LINE, 0, 0, "Draw bone as simple 2d lines with dots");
+ uiDefButI(block, ROW, REDRAWVIEW3D, "B-Bones", 210, 140,100,20, &arm->drawtype, 0, ARM_B_BONE, 0, 0, "Draw bone as boxes, showing subdivision and b-splines");
- by-= 23;
uiBlockBeginAlign(block);
- uiDefButBitI(block, TOG, ARM_B_BONES, REDRAWVIEW3D, "B-Bones", bx, by-23,97,20, &arm->flag, 0, 0, 0, 0, "Draw bone as boxes, showing subdivision and b-splines");
- uiDefButI(block, TOG|BIT|ARM_DRAWAXESBIT,REDRAWVIEW3D, "Draw Axes", bx, by-46,97,20, &arm->flag, 0, 0, 0, 0, "Draw bone axes");
- uiDefButI(block, TOG|BIT|ARM_DRAWNAMESBIT,REDRAWVIEW3D, "Draw Names", bx,by-69,97,20, &arm->flag, 0, 0, 0, 0, "Draw bone names");
- uiDefButBitC(block, TOG, OB_DRAWXRAY,REDRAWVIEW3D, "X-Ray", bx, by-92,97,20, &ob->dtx, 0, 0, 0, 0, "Draw armature in front of solid objects");
- uiDefButI(block, TOG|BIT|ARM_DELAYBIT,REDRAWVIEW3D, "Delay Deform", bx, by-115,97,20, &arm->flag, 0, 0, 0, 0, "Don't deform children when manipulating bones in pose mode");
-
+ uiDefButI(block, TOG|BIT|ARM_DRAWAXESBIT,REDRAWVIEW3D, "Draw Axes", 10, 110,100,20, &arm->flag, 0, 0, 0, 0, "Draw bone axes");
+ uiDefButI(block, TOG|BIT|ARM_DRAWNAMESBIT,REDRAWVIEW3D, "Draw Names", 110,110,100,20, &arm->flag, 0, 0, 0, 0, "Draw bone names");
+ uiDefButBitC(block, TOG, OB_DRAWXRAY,REDRAWVIEW3D, "X-Ray", 210,110,100,20, &ob->dtx, 0, 0, 0, 0, "Draw armature in front of solid objects");
}
static void editing_panel_armature_bones(Object *ob, bArmature *arm)
diff --git a/source/blender/src/drawarmature.c b/source/blender/src/drawarmature.c
index 395cfb7340f..3fdbf861099 100644
--- a/source/blender/src/drawarmature.c
+++ b/source/blender/src/drawarmature.c
@@ -373,6 +373,123 @@ static void draw_bone_points(int dt, int armflag, unsigned int boneflag, int id)
}
+static char bm_dot6[]= {0x0, 0x18, 0x3C, 0x7E, 0x7E, 0x3C, 0x18, 0x0};
+static char bm_dot8[]= {0x3C, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x3C};
+
+static void draw_line_bone(int armflag, int boneflag, int constflag, unsigned int id, bPoseChannel *pchan, EditBone *ebone)
+{
+ float length;
+
+ glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
+
+ if(pchan)
+ length= pchan->bone->length;
+ else
+ length= ebone->length;
+
+ glPushMatrix();
+ glScalef(length, length, length);
+
+ /* this chunk not in object mode */
+ if(armflag & (ARM_EDITMODE|ARM_POSEMODE)) {
+ glLineWidth(4.0);
+ if(armflag & ARM_POSEMODE) {
+ /* outline in black or selection color */
+ if (boneflag & BONE_ACTIVE) BIF_ThemeColorShade(TH_BONE_POSE, 40);
+ else if (boneflag & BONE_SELECTED) BIF_ThemeColor(TH_BONE_POSE);
+ else BIF_ThemeColor(TH_WIRE);
+ }
+ else if (armflag & ARM_EDITMODE) {
+ BIF_ThemeColor(TH_WIRE);
+ }
+
+ /* Draw root point if we have no IK parent */
+ if (!(boneflag & BONE_IK_TOPARENT)){
+ if (id != -1) { // no bitmap in selection mode, crashes 3d cards...
+ glLoadName (id | BONESEL_ROOT);
+ glBegin(GL_POINTS);
+ glVertex3f(0.0f, 0.0f, 0.0f);
+ glEnd();
+ }
+ else {
+ glRasterPos3f(0.0f, 0.0f, 0.0f);
+ glBitmap(8, 8, 4, 4, 0, 0, bm_dot8);
+ }
+ }
+
+ if (id != -1)
+ glLoadName ((GLuint) id|BONESEL_BONE);
+
+ glBegin(GL_LINES);
+ glVertex3f(0.0f, 0.0f, 0.0f);
+ glVertex3f(0.0f, 1.0f, 0.0f);
+ glEnd();
+
+ /* tip */
+ if (id != -1) { // no bitmap in selection mode, crashes 3d cards...
+ glLoadName (id | BONESEL_TIP);
+ glBegin(GL_POINTS);
+ glVertex3f(0.0f, 1.0f, 0.0f);
+ glEnd();
+ }
+ else {
+ glRasterPos3f(0.0f, 1.0f, 0.0f);
+ glBitmap(8, 8, 4, 4, 0, 0, bm_dot8);
+ }
+
+ /* further we send no names */
+ if (id != -1)
+ glLoadName (-1);
+
+ if(armflag & ARM_POSEMODE) {
+ /* inner part in background color or constraint */
+ if(constflag) {
+ if(constflag & PCHAN_HAS_IK) glColor3ub(255, 255, 0);
+ else if(constflag & PCHAN_HAS_CONST) glColor3ub(0, 255, 120);
+ else BIF_ThemeColor(TH_BONE_POSE); // PCHAN_HAS_ACTION
+ }
+ else BIF_ThemeColor(TH_BACK);
+ }
+ }
+
+ glLineWidth(2.0);
+
+ /* Draw root point if we have no IK parent */
+ if (!(boneflag & BONE_IK_TOPARENT)){
+ if (id == -1) { // no bitmap in selection mode, crashes 3d cards...
+ if(armflag & ARM_EDITMODE) {
+ if (boneflag & BONE_ROOTSEL) BIF_ThemeColor(TH_VERTEX_SELECT);
+ else BIF_ThemeColor(TH_VERTEX);
+ }
+ glRasterPos3f(0.0f, 0.0f, 0.0f);
+ glBitmap(8, 8, 4, 4, 0, 0, bm_dot6);
+ }
+ }
+
+ if(armflag & ARM_EDITMODE) {
+ if (boneflag & BONE_SELECTED) BIF_ThemeColor(TH_EDGE_SELECT);
+ else BIF_ThemeColor(TH_BACK);
+ }
+ glBegin(GL_LINES);
+ glVertex3f(0.0f, 0.0f, 0.0f);
+ glVertex3f(0.0f, 1.0f, 0.0f);
+ glEnd();
+
+ /* tip */
+ if (id == -1) { // no bitmap in selection mode, crashes 3d cards...
+ if(armflag & ARM_EDITMODE) {
+ if (boneflag & BONE_TIPSEL) BIF_ThemeColor(TH_VERTEX_SELECT);
+ else BIF_ThemeColor(TH_VERTEX);
+ }
+ glRasterPos3f(0.0f, 1.0f, 0.0f);
+ glBitmap(8, 8, 4, 4, 0, 0, bm_dot6);
+ }
+
+ glLineWidth(1.0);
+
+ glPopMatrix();
+}
+
static void draw_b_bone_boxes(int dt, bPoseChannel *pchan, float xwidth, float length, float zwidth)
{
int segments= 0;
@@ -580,7 +697,7 @@ static void draw_pose_channels(Object *ob, int dt)
if(tmp > 1.1) do_dashed= 0;
/* if solid we draw that first, with selection codes, but without names, axes etc */
- if(dt>OB_WIRE) {
+ if(dt>OB_WIRE && arm->drawtype!=ARM_LINE) {
if(arm->flag & ARM_POSEMODE) index= 0;
for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) {
@@ -594,7 +711,7 @@ static void draw_pose_channels(Object *ob, int dt)
if(bone->parent && (bone->parent->flag & BONE_HIDDEN))
flag &= ~BONE_IK_TOPARENT;
- if(arm->flag & ARM_B_BONES)
+ if(arm->drawtype==ARM_B_BONE)
draw_b_bone(OB_SOLID, arm->flag, flag, 0, index, pchan, NULL);
else {
/* scale the matrix to unit bone space */
@@ -611,10 +728,14 @@ static void draw_pose_channels(Object *ob, int dt)
}
/* wire draw over solid only in posemode */
- if(dt<=OB_WIRE || (arm->flag & ARM_POSEMODE)) {
+ if( dt<=OB_WIRE || (arm->flag & ARM_POSEMODE) || arm->drawtype==ARM_LINE) {
+ /* draw line check first. we do selection indices */
+ if (arm->drawtype==ARM_LINE) {
+ if(G.f & G_PICKSEL) index= 0;
+ }
/* if solid && posemode, we draw again with polygonoffset */
- if (dt>OB_WIRE && (arm->flag & ARM_POSEMODE))
+ else if (dt>OB_WIRE && (arm->flag & ARM_POSEMODE))
bglPolygonOffset(1.0);
else
/* and we use selection indices if not done yet */
@@ -651,7 +772,9 @@ static void draw_pose_channels(Object *ob, int dt)
if(pchan->flag & (POSE_ROT|POSE_LOC|POSE_SIZE))
constflag |= PCHAN_HAS_ACTION;
- if(arm->flag & ARM_B_BONES)
+ if(arm->drawtype==ARM_LINE)
+ draw_line_bone(arm->flag, flag, constflag, index, pchan, NULL);
+ else if(arm->drawtype==ARM_B_BONE)
draw_b_bone(OB_WIRE, arm->flag, flag, constflag, index, pchan, NULL);
else {
/* scale the matrix to unit bone space */
@@ -737,13 +860,13 @@ static void draw_ebones(Object *ob, int dt)
unsigned int index;
/* if solid we draw it first */
- if(dt>OB_WIRE) {
+ if(dt>OB_WIRE && arm->drawtype!=ARM_LINE) {
index= 0;
for (eBone=G.edbo.first, index=0; eBone; eBone=eBone->next, index++){
glPushMatrix();
set_matrix_editbone(eBone);
- if(arm->flag & ARM_B_BONES)
+ if(arm->drawtype==ARM_B_BONE)
draw_b_bone(OB_SOLID, arm->flag, eBone->flag, 0, index, NULL, eBone);
else {
/* scale the matrix to unit bone space */
@@ -757,15 +880,23 @@ static void draw_ebones(Object *ob, int dt)
/* if wire over solid, set offset */
index= -1;
- if (dt>OB_WIRE) bglPolygonOffset(1.0);
- else if(arm->flag & ARM_EDITMODE) index= 0; // do selection codes
+ if(arm->drawtype==ARM_LINE) {
+ if(G.f & G_PICKSEL)
+ index= 0;
+ }
+ else if (dt>OB_WIRE)
+ bglPolygonOffset(1.0);
+ else if(arm->flag & ARM_EDITMODE)
+ index= 0; // do selection codes
for (eBone=G.edbo.first; eBone; eBone=eBone->next){
glPushMatrix();
set_matrix_editbone(eBone);
- if(arm->flag & ARM_B_BONES)
+ if(arm->drawtype==ARM_LINE)
+ draw_line_bone(arm->flag, eBone->flag, 0, index, NULL, eBone);
+ else if(arm->drawtype==ARM_B_BONE)
draw_b_bone(OB_WIRE, arm->flag, eBone->flag, 0, index, NULL, eBone);
else {
/* scale the matrix to unit bone space */
diff --git a/source/blender/src/editnla.c b/source/blender/src/editnla.c
index 4091d07dc86..1cfb308164a 100644
--- a/source/blender/src/editnla.c
+++ b/source/blender/src/editnla.c
@@ -40,11 +40,12 @@
#include "PIL_time.h"
+#include "BKE_action.h"
#include "BKE_global.h"
-#include "BKE_main.h"
+#include "BKE_ipo.h"
#include "BKE_library.h"
+#include "BKE_main.h"
#include "BKE_nla.h"
-#include "BKE_action.h"
#include "MEM_guardedalloc.h"