diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index 9ac9289b535..c5f1e0ff7af 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -2181,11 +2181,12 @@ class VIEW3D_PT_view3d_display(bpy.types.Panel): layout.separator() layout.prop(view, "show_reconstruction") - sub = layout.column() - sub.active = view.show_reconstruction - sub.prop(view, "bundle_size") - sub.prop(view, "show_bundle_name") - sub.prop(view, "show_camera_path") + if view.show_reconstruction: + layout.label(text="Bundle type:") + layout.prop(view, "bundle_draw_type", text="") + layout.prop(view, "bundle_draw_size") + layout.prop(view, "show_bundle_name") + layout.prop(view, "show_camera_path") layout.separator() diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 6f16ada261e..7316eb6e183 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -11823,10 +11823,14 @@ static void do_versions(FileData *fd, Library *lib, Main *main) for (sl= sa->spacedata.first; sl; sl= sl->next) { if(sl->spacetype==SPACE_VIEW3D) { View3D *v3d= (View3D *)sl; + if(v3d->bundle_size==0.0f) { v3d->bundle_size= 0.1f; v3d->flag2 |= V3D_SHOW_RECONSTRUCTION; } + + if(v3d->bundle_drawtype==0) + v3d->bundle_drawtype= OB_EMPTY_SPHERE; } else if(sl->spacetype==SPACE_CLIP) { SpaceClip *sc= (SpaceClip *)sl; diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index a914fc18d01..04d5fe1a181 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -1401,37 +1401,6 @@ static void draw_bundle_sphere(void) glCallList(displist); } -static void draw_bundle_outline(void) -{ - static GLuint displist=0; - - if (displist == 0) { - GLUquadricObj *qobj; - - displist= glGenLists(1); - glNewList(displist, GL_COMPILE); - - glPushMatrix(); - - qobj= gluNewQuadric(); - gluQuadricDrawStyle(qobj, GLU_SILHOUETTE); - gluDisk(qobj, 0.0, 0.05, 8, 1); - - glRotatef(90, 0, 1, 0); - gluDisk(qobj, 0.0, 0.05, 8, 1); - - glRotatef(90, 1, 0, 0); - gluDisk(qobj, 0.0, 0.05, 8, 1); - - gluDeleteQuadric(qobj); - - glPopMatrix(); - glEndList(); - } - - glCallList(displist); -} - static void draw_viewport_reconstruction(Scene *scene, Base *base, View3D *v3d, MovieClip *clip, int flag) { MovieTracking *tracking= &clip->tracking; @@ -1487,31 +1456,46 @@ static void draw_viewport_reconstruction(Scene *scene, Base *base, View3D *v3d, else UI_ThemeColor(TH_SELECT); } else UI_ThemeColor(TH_WIRE); - draw_bundle_outline(); + drawaxes(0.05f, v3d->bundle_drawtype); glDepthMask(1); glEnable(GL_LIGHTING); } else if(v3d->drawtype>OB_WIRE) { - /* selection outline */ - if(TRACK_SELECTED(track)) { - if(base==BASACT) UI_ThemeColor(TH_ACTIVE); - else UI_ThemeColor(TH_SELECT); + if(v3d->bundle_drawtype==OB_EMPTY_SPHERE) { + /* selection outline */ + if(TRACK_SELECTED(track)) { + if(base==BASACT) UI_ThemeColor(TH_ACTIVE); + else UI_ThemeColor(TH_SELECT); - glDepthMask(0); - glLineWidth(2.f); - glDisable(GL_LIGHTING); - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + glDepthMask(0); + glLineWidth(2.f); + glDisable(GL_LIGHTING); + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + draw_bundle_sphere(); + + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + glEnable(GL_LIGHTING); + glLineWidth(1.f); + glDepthMask(1); + } + + UI_ThemeColor(TH_BUNDLE_SOLID); draw_bundle_sphere(); + } else { + glDisable(GL_LIGHTING); + glDepthMask(0); + + if(TRACK_SELECTED(track)) { + if(base==BASACT) UI_ThemeColor(TH_ACTIVE); + else UI_ThemeColor(TH_SELECT); + } else UI_ThemeColor(TH_WIRE); + + drawaxes(0.05f, v3d->bundle_drawtype); - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - glEnable(GL_LIGHTING); - glLineWidth(1.f); glDepthMask(1); + glEnable(GL_LIGHTING); } - - UI_ThemeColor(TH_BUNDLE_SOLID); - draw_bundle_sphere(); } glPopMatrix(); diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 76062c9f91d..1251dd5fe2c 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -262,6 +262,7 @@ static SpaceLink *view3d_new(const bContext *C) v3d->around= V3D_CENTROID; v3d->bundle_size= 0.1f; + v3d->bundle_drawtype= OB_EMPTY_SPHERE; /* header */ ar= MEM_callocN(sizeof(ARegion), "header for view3d"); diff --git a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h index 47a96db8f62..2982f8f86ac 100644 --- a/source/blender/makesdna/DNA_view3d_types.h +++ b/source/blender/makesdna/DNA_view3d_types.h @@ -148,7 +148,11 @@ typedef struct View3D { short blockhandler[8]; float viewquat[4], dist; /* XXX depricated */ + float bundle_size; /* size of bundles in reconstructed data */ + short bundle_drawtype; /* display style for bundle */ + + char pad[6]; unsigned int lay_used; /* used while drawing */ diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 16a1909c9f0..e63a3fb0c96 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -1208,6 +1208,16 @@ static void rna_def_space_view3d(BlenderRNA *brna) {RV3D_CAMOB, "CAMERA", 0, "Camera", ""}, {0, NULL, 0, NULL, NULL}}; + static EnumPropertyItem bundle_drawtype_items[] = { + {OB_PLAINAXES, "PLAIN_AXES", 0, "Plain Axes", ""}, + {OB_ARROWS, "ARROWS", 0, "Arrows", ""}, + {OB_SINGLE_ARROW, "SINGLE_ARROW", 0, "Single Arrow", ""}, + {OB_CIRCLE, "CIRCLE", 0, "Circle", ""}, + {OB_CUBE, "CUBE", 0, "Cube", ""}, + {OB_EMPTY_SPHERE, "SPHERE", 0, "Sphere", ""}, + {OB_EMPTY_CONE, "CONE", 0, "Cone", ""}, + {0, NULL, 0, NULL, NULL}}; + srna= RNA_def_struct(brna, "SpaceView3D", "Space"); RNA_def_struct_sdna(srna, "View3D"); RNA_def_struct_ui_text(srna, "3D View Space", "3D View space data"); @@ -1437,12 +1447,18 @@ static void rna_def_space_view3d(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Show Reconstruction", "Display reconstruction data from active movie clip"); RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); - prop= RNA_def_property(srna, "bundle_size", PROP_FLOAT, PROP_NONE); + prop= RNA_def_property(srna, "bundle_draw_size", PROP_FLOAT, PROP_NONE); RNA_def_property_range(prop, 0.0, FLT_MAX); RNA_def_property_float_sdna(prop, NULL, "bundle_size"); RNA_def_property_ui_text(prop, "Bundle Size", "Display size of bundles from reconstructed data"); RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); + prop= RNA_def_property(srna, "bundle_draw_type", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "bundle_drawtype"); + RNA_def_property_enum_items(prop, bundle_drawtype_items); + RNA_def_property_ui_text(prop, "Bundle Display Type", "Viewport display style for bundles"); + RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); + prop= RNA_def_property(srna, "show_camera_path", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag2", V3D_SHOW_CAMERAPATH); RNA_def_property_ui_text(prop, "Show Camera Path", "Show reconstructed path of ameraip");