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
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/BKE_gpencil_geom.h6
-rw-r--r--source/blender/blenkernel/intern/gpencil_geom.cc18
-rw-r--r--source/blender/editors/gpencil/gpencil_edit.c36
-rw-r--r--source/blender/editors/gpencil/gpencil_paint.c2
-rw-r--r--source/blender/io/gpencil/intern/gpencil_io_base.cc2
-rw-r--r--source/blender/io/gpencil/intern/gpencil_io_export_pdf.cc2
-rw-r--r--source/blender/io/gpencil/intern/gpencil_io_export_svg.cc2
7 files changed, 32 insertions, 36 deletions
diff --git a/source/blender/blenkernel/BKE_gpencil_geom.h b/source/blender/blenkernel/BKE_gpencil_geom.h
index 39ef738c631..fc43cfa078d 100644
--- a/source/blender/blenkernel/BKE_gpencil_geom.h
+++ b/source/blender/blenkernel/BKE_gpencil_geom.h
@@ -466,7 +466,7 @@ void BKE_gpencil_stroke_uniform_subdivide(struct bGPdata *gpd,
* This allows for manipulations in 2D but also easy conversion back to 3D.
* \note also takes care of parent space transform.
*/
-void BKE_gpencil_stroke_to_view_space(struct RegionView3D *rv3d,
+void BKE_gpencil_stroke_to_view_space(float viewmat[4][4],
struct bGPDstroke *gps,
const float diff_mat[4][4]);
/**
@@ -475,7 +475,7 @@ void BKE_gpencil_stroke_to_view_space(struct RegionView3D *rv3d,
* Inverse of #BKE_gpencil_stroke_to_view_space
* \note also takes care of parent space transform.
*/
-void BKE_gpencil_stroke_from_view_space(struct RegionView3D *rv3d,
+void BKE_gpencil_stroke_from_view_space(float viewinv[4][4],
struct bGPDstroke *gps,
const float diff_mat[4][4]);
/**
@@ -483,7 +483,7 @@ void BKE_gpencil_stroke_from_view_space(struct RegionView3D *rv3d,
* \param subdivisions: Number of subdivisions for the start and end caps.
* \return: bGPDstroke pointer to stroke perimeter.
*/
-struct bGPDstroke *BKE_gpencil_stroke_perimeter_from_view(struct RegionView3D *rv3d,
+struct bGPDstroke *BKE_gpencil_stroke_perimeter_from_view(float viewmat[4][4],
struct bGPdata *gpd,
const struct bGPDlayer *gpl,
struct bGPDstroke *gps,
diff --git a/source/blender/blenkernel/intern/gpencil_geom.cc b/source/blender/blenkernel/intern/gpencil_geom.cc
index ce2e106c664..d833249add8 100644
--- a/source/blender/blenkernel/intern/gpencil_geom.cc
+++ b/source/blender/blenkernel/intern/gpencil_geom.cc
@@ -3767,7 +3767,7 @@ void BKE_gpencil_stroke_uniform_subdivide(bGPdata *gpd,
BKE_gpencil_stroke_geometry_update(gpd, gps);
}
-void BKE_gpencil_stroke_to_view_space(RegionView3D *rv3d,
+void BKE_gpencil_stroke_to_view_space(float viewmat[4][4],
bGPDstroke *gps,
const float diff_mat[4][4])
{
@@ -3776,11 +3776,11 @@ void BKE_gpencil_stroke_to_view_space(RegionView3D *rv3d,
/* Point to parent space. */
mul_v3_m4v3(&pt->x, diff_mat, &pt->x);
/* point to view space */
- mul_m4_v3(rv3d->viewmat, &pt->x);
+ mul_m4_v3(viewmat, &pt->x);
}
}
-void BKE_gpencil_stroke_from_view_space(RegionView3D *rv3d,
+void BKE_gpencil_stroke_from_view_space(float viewinv[4][4],
bGPDstroke *gps,
const float diff_mat[4][4])
{
@@ -3789,7 +3789,7 @@ void BKE_gpencil_stroke_from_view_space(RegionView3D *rv3d,
for (int i = 0; i < gps->totpoints; i++) {
bGPDspoint *pt = &gps->points[i];
- mul_v3_m4v3(&pt->x, rv3d->viewinv, &pt->x);
+ mul_v3_m4v3(&pt->x, viewinv, &pt->x);
mul_m4_v3(inverse_diff_mat, &pt->x);
}
}
@@ -4206,7 +4206,7 @@ static ListBase *gpencil_stroke_perimeter_ex(const bGPdata *gpd,
return perimeter_list;
}
-bGPDstroke *BKE_gpencil_stroke_perimeter_from_view(struct RegionView3D *rv3d,
+bGPDstroke *BKE_gpencil_stroke_perimeter_from_view(float viewmat[4][4],
bGPdata *gpd,
const bGPDlayer *gpl,
bGPDstroke *gps,
@@ -4217,6 +4217,10 @@ bGPDstroke *BKE_gpencil_stroke_perimeter_from_view(struct RegionView3D *rv3d,
if (gps->totpoints == 0) {
return nullptr;
}
+
+ float viewinv[4][4];
+ invert_m4_m4(viewinv, viewmat);
+
/* Duplicate only points and fill data. Weight and Curve are not needed. */
bGPDstroke *gps_temp = (bGPDstroke *)MEM_dupallocN(gps);
gps_temp->prev = gps_temp->next = nullptr;
@@ -4241,7 +4245,7 @@ bGPDstroke *BKE_gpencil_stroke_perimeter_from_view(struct RegionView3D *rv3d,
pt_dst->uv_rot = 0;
}
- BKE_gpencil_stroke_to_view_space(rv3d, gps_temp, diff_mat);
+ BKE_gpencil_stroke_to_view_space(viewmat, gps_temp, diff_mat);
int num_perimeter_points = 0;
ListBase *perimeter_points = gpencil_stroke_perimeter_ex(
gpd, gpl, gps_temp, subdivisions, thickness_chg, &num_perimeter_points);
@@ -4264,7 +4268,7 @@ bGPDstroke *BKE_gpencil_stroke_perimeter_from_view(struct RegionView3D *rv3d,
pt->flag |= GP_SPOINT_SELECT;
}
- BKE_gpencil_stroke_from_view_space(rv3d, perimeter_stroke, diff_mat);
+ BKE_gpencil_stroke_from_view_space(viewinv, perimeter_stroke, diff_mat);
/* Free temp data. */
BLI_freelistN(perimeter_points);
diff --git a/source/blender/editors/gpencil/gpencil_edit.c b/source/blender/editors/gpencil/gpencil_edit.c
index 280512a2dd3..b826f033cc0 100644
--- a/source/blender/editors/gpencil/gpencil_edit.c
+++ b/source/blender/editors/gpencil/gpencil_edit.c
@@ -4001,40 +4001,35 @@ static int gpencil_stroke_outline_exec(bContext *C, wmOperator *op)
bool changed = false;
- float viewmat[4][4], viewinv[4][4];
+ float viewmat[4][4];
copy_m4_m4(viewmat, rv3d->viewmat);
- copy_m4_m4(viewinv, rv3d->viewinv);
switch (view_mode) {
case GP_PERIMETER_FRONT:
unit_m4(rv3d->viewmat);
- rv3d->viewmat[1][1] = 0.0f;
- rv3d->viewmat[1][2] = -1.0f;
+ viewmat[1][1] = 0.0f;
+ viewmat[1][2] = -1.0f;
- rv3d->viewmat[2][1] = 1.0f;
- rv3d->viewmat[2][2] = 0.0f;
+ viewmat[2][1] = 1.0f;
+ viewmat[2][2] = 0.0f;
- rv3d->viewmat[3][2] = -10.0f;
- invert_m4_m4(rv3d->viewinv, rv3d->viewmat);
+ viewmat[3][2] = -10.0f;
break;
case GP_PERIMETER_SIDE:
- zero_m4(rv3d->viewmat);
- rv3d->viewmat[0][2] = 1.0f;
- rv3d->viewmat[1][0] = 1.0f;
- rv3d->viewmat[2][1] = 1.0f;
- rv3d->viewmat[3][3] = 1.0f;
- invert_m4_m4(rv3d->viewinv, rv3d->viewmat);
+ zero_m4(viewmat);
+ viewmat[0][2] = 1.0f;
+ viewmat[1][0] = 1.0f;
+ viewmat[2][1] = 1.0f;
+ viewmat[3][3] = 1.0f;
break;
case GP_PERIMETER_TOP:
- unit_m4(rv3d->viewmat);
- unit_m4(rv3d->viewinv);
+ unit_m4(viewmat);
break;
case GP_PERIMETER_CAMERA: {
Scene *scene = CTX_data_scene(C);
Object *cam_ob = scene->camera;
if (cam_ob != NULL) {
- invert_m4_m4(rv3d->viewmat, cam_ob->obmat);
- copy_m4_m4(rv3d->viewinv, cam_ob->obmat);
+ invert_m4_m4(viewmat, cam_ob->obmat);
}
break;
}
@@ -4107,7 +4102,7 @@ static int gpencil_stroke_outline_exec(bContext *C, wmOperator *op)
/* Stroke. */
const float ovr_thickness = keep ? thickness : 0.0f;
bGPDstroke *gps_perimeter = BKE_gpencil_stroke_perimeter_from_view(
- rv3d, gpd, gpl, gps_duplicate, subdivisions, diff_mat, ovr_thickness);
+ viewmat, gpd, gpl, gps_duplicate, subdivisions, diff_mat, ovr_thickness);
gps_perimeter->flag &= ~GP_STROKE_SELECT;
/* Assign material. */
switch (material_mode) {
@@ -4174,9 +4169,6 @@ static int gpencil_stroke_outline_exec(bContext *C, wmOperator *op)
}
}
- /* Back to view matrix. */
- copy_m4_m4(rv3d->viewmat, viewmat);
- copy_m4_m4(rv3d->viewinv, viewinv);
if (changed) {
/* notifiers */
diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c
index cbc88b57c65..be2fc566da5 100644
--- a/source/blender/editors/gpencil/gpencil_paint.c
+++ b/source/blender/editors/gpencil/gpencil_paint.c
@@ -945,7 +945,7 @@ static bGPDstroke *gpencil_stroke_to_outline(tGPsdata *p, bGPDstroke *gps)
unit_m4(diff_mat);
const float outline_thickness = (float)brush->size * gpencil_settings->outline_fac * 0.5f;
bGPDstroke *gps_perimeter = BKE_gpencil_stroke_perimeter_from_view(
- rv3d, p->gpd, gpl, gps_duplicate, 3, diff_mat, outline_thickness);
+ rv3d->viewmat, p->gpd, gpl, gps_duplicate, 3, diff_mat, outline_thickness);
/* Assign material. */
if (gpencil_settings->material_alt == NULL) {
gps_perimeter->mat_nr = gps->mat_nr;
diff --git a/source/blender/io/gpencil/intern/gpencil_io_base.cc b/source/blender/io/gpencil/intern/gpencil_io_base.cc
index e7d8faaacfa..b5838ad9485 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_base.cc
+++ b/source/blender/io/gpencil/intern/gpencil_io_base.cc
@@ -257,7 +257,7 @@ float GpencilIO::stroke_point_radius_get(bGPDlayer *gpl, bGPDstroke *gps)
/* Radius. */
bGPDstroke *gps_perimeter = BKE_gpencil_stroke_perimeter_from_view(
- rv3d_, gpd_, gpl, gps, 3, diff_mat_.values, 0.0f);
+ rv3d_->viewmat, gpd_, gpl, gps, 3, diff_mat_.values, 0.0f);
pt = &gps_perimeter->points[0];
const float2 screen_ex = gpencil_3D_point_to_2D(&pt->x);
diff --git a/source/blender/io/gpencil/intern/gpencil_io_export_pdf.cc b/source/blender/io/gpencil/intern/gpencil_io_export_pdf.cc
index 95e83769979..463032ebb9d 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_export_pdf.cc
+++ b/source/blender/io/gpencil/intern/gpencil_io_export_pdf.cc
@@ -192,7 +192,7 @@ void GpencilExporterPDF::export_gpencil_layers()
}
else {
bGPDstroke *gps_perimeter = BKE_gpencil_stroke_perimeter_from_view(
- rv3d_, gpd_, gpl, gps_duplicate, 3, diff_mat_.values, 0.0f);
+ rv3d_->viewmat, gpd_, gpl, gps_duplicate, 3, diff_mat_.values, 0.0f);
/* Sample stroke. */
if (params_.stroke_sample > 0.0f) {
diff --git a/source/blender/io/gpencil/intern/gpencil_io_export_svg.cc b/source/blender/io/gpencil/intern/gpencil_io_export_svg.cc
index e0eded35ce9..58f12e9b8b1 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_export_svg.cc
+++ b/source/blender/io/gpencil/intern/gpencil_io_export_svg.cc
@@ -217,7 +217,7 @@ void GpencilExporterSVG::export_gpencil_layers()
}
else {
bGPDstroke *gps_perimeter = BKE_gpencil_stroke_perimeter_from_view(
- rv3d_, gpd_, gpl, gps_duplicate, 3, diff_mat_.values, 0.0f);
+ rv3d_->viewmat, gpd_, gpl, gps_duplicate, 3, diff_mat_.values, 0.0f);
/* Sample stroke. */
if (params_.stroke_sample > 0.0f) {