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:
authorCampbell Barton <ideasman42@gmail.com>2012-02-01 13:31:13 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-02-01 13:31:13 +0400
commit4aa82806effa9e114f14f88d7b2da23b0a2bcca6 (patch)
tree6741012808ab0c83f96ff7e52c8168cb62b8c8b7 /source/blender/editors/space_view3d
parent35678eaae52a8436469b06307eaaf4d8503863f1 (diff)
parented0d2b5e9205fc99ed38957f01acaa62c3811333 (diff)
svn merge ^/trunk/blender -r43751:43819, need to look into changes made to editmesh_loop.c from this range still
Diffstat (limited to 'source/blender/editors/space_view3d')
-rw-r--r--source/blender/editors/space_view3d/drawobject.c17
-rw-r--r--source/blender/editors/space_view3d/view3d_view.c64
2 files changed, 68 insertions, 13 deletions
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index 2083b2789ef..2bca87c564e 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -4110,7 +4110,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
ParticleDrawData *pdd = psys->pdd;
Material *ma;
float vel[3], imat[4][4];
- float timestep, pixsize=1.0, pa_size, r_tilt, r_length;
+ float timestep, pixsize_scale, pa_size, r_tilt, r_length;
float pa_time, pa_birthtime, pa_dietime, pa_health, intensity;
float cfra;
float ma_col[3]= {0.0f, 0.0f, 0.0f};
@@ -4217,12 +4217,11 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
case PART_DRAW_CROSS:
case PART_DRAW_AXIS:
/* lets calculate the scale: */
- pixsize= ED_view3d_pixel_size(rv3d, ob->obmat[3]);
- if(part->draw_size==0.0)
- pixsize *= 2.0f;
+ if (part->draw_size == 0.0)
+ pixsize_scale = 2.0f;
else
- pixsize*=part->draw_size;
+ pixsize_scale = part->draw_size;
if(draw_as==PART_DRAW_AXIS)
create_cdata = 1;
@@ -4410,6 +4409,8 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
ct+=dt;
for(i=0; i < trail_count; i++, ct += dt) {
+ float pixsize;
+
if(part->draw & PART_ABS_PATH_TIME) {
if(ct < pa_birthtime || ct > pa_dietime)
continue;
@@ -4443,6 +4444,8 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
bb.time = ct;
}
+ pixsize = ED_view3d_pixel_size(rv3d, state.co) * pixsize_scale;
+
draw_particle(&state, draw_as, part->draw, pixsize, imat, part->draw_line, &bb, psys->pdd);
totpoint++;
@@ -4453,6 +4456,8 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
{
state.time=cfra;
if(psys_get_particle_state(&sim,a,&state,0)){
+ float pixsize;
+
if(psys->parent)
mul_m4_v3(psys->parent->obmat, state.co);
@@ -4476,6 +4481,8 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
bb.time = pa_time;
}
+ pixsize = ED_view3d_pixel_size(rv3d, state.co) * pixsize_scale;
+
draw_particle(&state, draw_as, part->draw, pixsize, imat, part->draw_line, &bb, pdd);
totpoint++;
diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c
index 67165560def..c05f9de691b 100644
--- a/source/blender/editors/space_view3d/view3d_view.c
+++ b/source/blender/editors/space_view3d/view3d_view.c
@@ -68,6 +68,9 @@
#include "BL_System.h"
#endif
+#include "RNA_access.h"
+#include "RNA_define.h"
+
#include "view3d_intern.h" // own include
/* use this call when executing an operator,
@@ -945,23 +948,29 @@ void project_short_noclip(ARegion *ar, const float vec[3], short adr[2])
}
}
-void project_float(ARegion *ar, const float vec[3], float adr[2])
+void apply_project_float(float persmat[4][4], int winx, int winy, const float vec[3], float adr[2])
{
- RegionView3D *rv3d= ar->regiondata;
float vec4[4];
-
+
copy_v3_v3(vec4, vec);
vec4[3]= 1.0;
adr[0]= IS_CLIPPED;
-
- mul_m4_v4(rv3d->persmat, vec4);
-
+
+ mul_m4_v4(persmat, vec4);
+
if(vec4[3] > (float)BL_NEAR_CLIP) {
- adr[0] = (float)(ar->winx/2.0f)+(ar->winx/2.0f)*vec4[0]/vec4[3];
- adr[1] = (float)(ar->winy/2.0f)+(ar->winy/2.0f)*vec4[1]/vec4[3];
+ adr[0] = (float)(winx/2.0f)+(winx/2.0f)*vec4[0]/vec4[3];
+ adr[1] = (float)(winy/2.0f)+(winy/2.0f)*vec4[1]/vec4[3];
}
}
+void project_float(ARegion *ar, const float vec[3], float adr[2])
+{
+ RegionView3D *rv3d= ar->regiondata;
+
+ apply_project_float(rv3d->persmat, ar->winx, ar->winy, vec, adr);
+}
+
void project_float_noclip(ARegion *ar, const float vec[3], float adr[2])
{
RegionView3D *rv3d= ar->regiondata;
@@ -1852,3 +1861,42 @@ float ED_view3d_pixel_size(struct RegionView3D *rv3d, const float co[3])
rv3d->persmat[2][3]*co[2])
) * rv3d->pixsize;
}
+
+/* view matrix properties utilities */
+
+void ED_view3d_operator_properties_viewmat(wmOperatorType *ot)
+{
+ PropertyRNA *prop;
+
+ prop = RNA_def_int(ot->srna, "region_width", 0, 0, INT_MAX, "Region Width", "", 0, INT_MAX);
+ RNA_def_property_flag(prop, PROP_HIDDEN);
+
+ prop = RNA_def_int(ot->srna, "region_height", 0, 0, INT_MAX, "Region height", "", 0, INT_MAX);
+ RNA_def_property_flag(prop, PROP_HIDDEN);
+
+ prop = RNA_def_float_matrix(ot->srna, "perspective_matrix", 4, 4, NULL, 0.0f, 0.0f, "", "Perspective Matrix", 0.0f, 0.0f);
+ RNA_def_property_flag(prop, PROP_HIDDEN);
+}
+
+void ED_view3d_operator_properties_viewmat_set(bContext *C, wmOperator *op)
+{
+ ARegion *ar= CTX_wm_region(C);
+ RegionView3D *rv3d= ED_view3d_context_rv3d(C);
+
+ if(!RNA_struct_property_is_set(op->ptr, "region_width"))
+ RNA_int_set(op->ptr, "region_width", ar->winx);
+
+ if(!RNA_struct_property_is_set(op->ptr, "region_height"))
+ RNA_int_set(op->ptr, "region_height", ar->winy);
+
+ if(!RNA_struct_property_is_set(op->ptr, "perspective_matrix"))
+ RNA_float_set_array(op->ptr, "perspective_matrix", (float *)rv3d->persmat);
+}
+
+void ED_view3d_operator_properties_viewmat_get(wmOperator *op, int *winx, int *winy, float persmat[4][4])
+{
+ *winx = RNA_int_get(op->ptr, "region_width");
+ *winy = RNA_int_get(op->ptr, "region_height");
+
+ RNA_float_get_array(op->ptr, "perspective_matrix", (float *)persmat);
+}